Javascript 自定义绑定到不调用更新函数的可观察数组

Javascript 自定义绑定到不调用更新函数的可观察数组,javascript,knockout.js,Javascript,Knockout.js,我有一个非常简单的绑定: ko.bindingHandlers.chosen = { init: function (element, valueAccessor, allBindingsAccessor, viewModel) { console.log("INIT"); }, update: function (element, valueAccessor, allBindingsAccessor, viewModel) { conso

我有一个非常简单的绑定:

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>
并在必要时更新如下:

this.Options(newValues);
但是,
“它起作用”
只记录一次(在呈现选择列表时),并且不再记录。看见试着按下“重新加载”按钮:数组被更新,选择列表被重新呈现(耶!),但是自定义更新函数没有被调用(不!)。我甚至试图强制
。值发生了变异
,但没有成功


我需要更新功能才能正常工作。为什么没有发生这种情况?

之所以没有发生这种情况,是因为在更新函数中没有使用
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!");
    }
};

这是最新的提琴:

我能给你造一尊雕像吗?
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!");
    }
};