向可观察对象动态添加属性

时间:2013-02-21 18:50:42

标签: knockout.js

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

        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?

感谢。

1 个答案:

答案 0 :(得分:9)

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

要进行更新,您需要完全重置Items

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

或调用observable的valueHasMutated函数,强制任何订阅者更新如下:

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