【问题标题】:contenteditable binding for KnockoutJSKnockoutJS 的 contenteditable 绑定
【发布时间】:2012-05-05 00:19:55
【问题描述】:

我目前正在尝试实现自定义 KnockoutJS 绑定以使 div 内容可编辑。作为示例,我将采用第一个教程中的 ViewModel 在 knockoutJS 并添加一个“编辑模式”-flag:

JSBin:http://jsbin.com/ejugip/3/edit

ViewModel 代码:

function HelloWorldViewModel() {
    var self = this;
    self.isInEditMode = ko.observable(true);
    self.firstName = ko.observable('Bert');
    self.lastName = ko.observable('Berntington');
    self.fullName = ko.computed(function () {
        return self.firstName() + ' ' + self.lastName();
    });
}

查看代码:

<fieldset id="HelloWorldView">  
    <legend>Hello World</legend>
    <p><input type="checkbox" data-bind="checked: isInEditMode" /> edit mode</p>
    <label>First name:</label>
    <div data-bind="contenteditable: isInEditMode, text: firstName"></div>
    <label>Last name:</label>
    <div data-bind="contenteditable: isInEditMode, text: lastName"></div>
    <label>Full name:</label>
    <div data-bind="text: fullName"></div>
</fieldset>

到目前为止,这是我的绑定处理程序代码:

function makeEditable(element, editable) {
    $(element).attr('contenteditable', (editable) ? true : false);
    $(element).removeClass('Editable');
    if (editable) {
        $(element).addClass('Editable');
    }
}

ko.bindingHandlers.contenteditable = {
    init: function (element, valueAccessor) {},
    update: function (element, valueAccessor) {
        var editable = ko.utils.unwrapObservable(valueAccessor());
        makeEditable(element, editable);
    }
};

现在,我只是将 contenteditable 属性添加到元素和一个 css 类。

所以进入和离开编辑模式都可以正常工作。仍然缺少的一件事是,在编辑 contenteditable 元素后 viewModel 会得到更新。

让视图模型与我的可编辑元素同步的最佳方式是什么?我需要自己的自定义“文本:”绑定,还是有更简单的方法?

【问题讨论】:

标签: javascript html data-binding knockout.js contenteditable


【解决方案1】:

前段时间,我创建了一个基于 KO 的 contenteditable binding plus 编辑器,您或许可以从中获得一些灵感。

https://github.com/madcapnmckay/Knockout-UI/blob/master/js/ui-editor.js

希望这会有所帮助。

【讨论】:

  • 谢谢。有点疏忽了,真得找时间更新整理一下。
  • 虽然有点被忽视了,但这是一个很好的开始,可以进一步了解如何使用 knockout 的自定义绑定处理程序。我还是个 koJS 新手 :)
猜你喜欢
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多