2013-02-21 46 views
7

我有一个这样的视图模型,动态添加属性来观察的对象

 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?

谢谢。

回答

9

因为C本身并不是最初可观察到的,所以绑定在更改时不知道它需要更新。

要使它更新,你要么需要完全重新Items

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

或致电观察到的valueHasMutated功能,强制所有用户更新,如:

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

感谢它工作!容易理解解决方案 – 2017-01-11 18:18:28

相关问题