8

我有一个像这样的视图模型,

        function viewModel() {
            this.loadData = function() {
                this.Items().C = 3;
            };

            this.Items = ko.observable({ A: 1});
            this.Items().B = 2;
        }

        var vm = new viewModel();
        ko.applyBindings(vm);
        vm.loadData();

我正在打印出这样的值,

        <span data-bind="text: $root.Items().A"></span>
        <span data-bind="text: $root.Items().B"></span>
        <span data-bind="text: $root.Items().C"></span>

它打印出 A 和 B 的值,而不是 C?

谢谢。

4

1 回答 1

10

由于C它本身最初是不可观察的,因此绑定不会知道它需要在进行更改时进行更新。

要使其更新,您需要Items完全重置:

this.loadData = function() {
    var existing = this.Items();
    existing.C = 3;
    this.Items(existing);
};

或调用valueHasMutatedobservable 的函数,以强制任何订阅者更新,例如:

this.loadData = function() {
    this.Items().C = 3;
    this.Items.valueHasMutated();
};
于 2013-02-21T19:48:34.160 回答