2013-02-21 21 views
7

Ho un ViewModel come questo,dinamicamente l'aggiunta di oggetti da oggetto osservabile

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

sto stampando i valori come questo,

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

esso stampa valori di A e B, ma non C?

Grazie.

risposta

9

Poiché, C inizialmente non è osservabile, il binding non saprebbe che è necessario aggiornarlo quando viene apportata una modifica.

Per renderlo aggiornare, si avrebbe sia necessario reimpostare Items tutto:

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

o chiamare la funzione valueHasMutated del osservabile, per costringere eventuali abbonati di aggiornare come:

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

grazie essa lavoro! soluzione facile da capire :) –

Problemi correlati