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);
};

または、observableの関数を呼び出して、valueHasMutatedサブスクライバーに次のように更新を強制します。

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