我目前正試圖實現一個自定義KnockoutJS綁定,使div contenteditable。舉個例子,我在第一篇教程走在視圖模型和knockoutJS添加一個 「編輯模式」 -flag:contenteditable綁定爲KnockoutJS
JSBin:http://jsbin.com/ejugip/3/edit
視圖模型代碼:
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被更新。
讓viewmodel與我的可編輯元素同步的最佳方式是什麼?我是否需要一個自定義的「text:」綁定,還是有更簡單的方法?
This thread:https://groups.google.com/d/topic/knockoutjs/Mh0w_cEMqOk/discussion and this fiddle:http://jsfiddle.net/rniemeyer/JksKx/可能有幫助。 – 2012-04-24 13:21:36