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

Sat*_*nix 4 javascript knockout.js

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

ko.bindingHandlers.chosen = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        console.log("INIT");
    },
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        console.log("IT WORKS!");
    }
};
Run Code Online (Sandbox Code Playgroud)

用于选择:

<select data-bind="
        options: Options,
        chosen: Options
    "></select>
Run Code Online (Sandbox Code Playgroud)

Options声明为:

this.Options = ko.observableArray(opt1);
Run Code Online (Sandbox Code Playgroud)

并在必要时进行更新,如下所示:

this.Options(newValues);
Run Code Online (Sandbox Code Playgroud)

但是,"IT WORKS"仅记录一次(呈现选择列表时),并且不会再记录一次。看看这个 jsfiddle。尝试按“重新加载”按钮:数组已更新,选择列表重新呈现(耶!),但未调用自定义更新函数(不!)。我什至尝试过强迫,.valueHasMutated但没有成功。

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

Art*_*kov 5

它不会发生,因为您没有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!");
    }
};
Run Code Online (Sandbox Code Playgroud)

这里是更新的小提琴:http://jsfiddle.net/wzTg4/8/

  • 我可以为你建一座雕像吗? (2认同)