我有这个非常简单的绑定:
ko.bindingHandlers.chosen = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
console.log("INIT");
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
console.log("IT WORKS!");
}
};
用于选择:
<select data-bind="
options: Options,
chosen: Options
"></select>
Options
声明为:
this.Options = ko.observableArray(opt1);
并在必要时更新,如下:
this.Options(newValues);
但是,"IT WORKS"
只会被记录一次(当呈现选择列表时),而不再记录。见this jsfiddle。尝试按“重新加载”按钮:更新数组,重新呈现选择列表(耶!)但不调用自定义更新功能(不!)。我甚至试图强迫.valueHasMutated
,但没有成功。
我需要更新功能才能正常工作。为什么不发生这种情况?
答案 0 :(得分:4)
由于您未在更新功能中使用valueAccessor
,因此未发生这种情况。如果您使用它,您将获得update
函数:
ko.bindingHandlers.chosen = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
console.log("INIT");
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var value = ko.unwrap(valueAccessor());
console.log("IT WORKS!");
}
};
这是更新的小提琴:http://jsfiddle.net/wzTg4/8/