2013-02-21 32 views
7

Tôi có một viewmodel như thế này,động thêm thuộc tính cho đối tượng quan sát được

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

Tôi in ra các giá trị như thế này,

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

Nó in ra giá trị của A và B, nhưng không C?

Cảm ơn.

Trả lời

9

Vì, C chính nó là không thể quan sát ban đầu, ràng buộc sẽ không biết rằng nó cần phải cập nhật khi thay đổi được thực hiện.

Để làm cho nó cập nhật, bạn sẽ hoặc là cần phải thiết lập lại Items hoàn toàn:

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

hoặc gọi valueHasMutated chức năng của thể quan sát được, buộc bất kỳ thuê bao để cập nhật như:

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

nhờ nó công việc! dễ hiểu giải pháp :) –

Các vấn đề liên quan