【发布时间】:2013-10-21 06:39:40
【问题描述】:
我发现了一个自定义绑定,可以在可编辑的 div 中进行可观察的更新。 发生事件时,我无法运行函数。
有人知道我可以对我的自定义绑定“editableText”做些什么吗?在我的 ViewModel 中运行一个函数?
我希望函数“nameChange”在文本更改时运行。
HTML:
<div contenteditable="true" data-bind="event: { change: nameChange }, editableText: firstName"></div>
Javascript:
//Editable Text Custom Binding
ko.bindingHandlers.editableText = {
init: function (element, valueAccessor) {
$(element).on('blur', function () {
var observable = valueAccessor();
observable($(this).text());
});
},
update: function (element, valueAccessor, allBindingsAccessor, data) {
var value = ko.utils.unwrapObservable(valueAccessor());
$(element).text(value);
}
};
//Knockout ViewModel
function viewModel(){
var self = this;
self.firstName = ko.observable();
self.status = ko.observable();
self.nameChange = function(){
console.log("Name has been updated");
ko.mapping.fromJS("Name has been updated", {}, self.status)
}
self.loadName = function(){
ko.mapping.fromJS("hey", {}, self.firstName)
}
}
var vm = new viewModel();
ko.applyBindings(vm);
vm.loadName();
【问题讨论】:
-
恐怕你的问题可能是this one的骗子:没有(广泛支持的)ContentEditable元素事件。
-
看看这个 Kendo UI 绑定,如果你需要一个支持 KO 的 HTML 编辑器,它真的很棒rniemeyer.github.io/knockout-kendo/web/Editor.html
标签: binding knockout.js contenteditable