4

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

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"只记录一次(在呈现选择列表时)并且永远不会再次记录。看到这个 jsfiddle。尝试按下“重新加载”按钮:数组已更新,选择列表重新呈现(耶!)但未调用自定义更新函数(不!)。我什至试图强迫.valueHasMutated但没有成功。

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

4

1 回答 1

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/

于 2013-11-08T10:47:25.913 回答