2012-03-24 15 views
8

Voglio cambiare un oggetto in un viewModel con un altro, con lo stesso tipo (ad es. Person). Se faccio questo:KnockoutJS - Rebinding ViewModel

var personViewModel = function (person) { 
    var self = this; 

    self.id = person.id; 
    self.firstName = ko.observable(person.firstName); 
    self.lastName = ko.observable(person.lastName); 
    self.addresses = ko.observableArray(contact.addresses); 

    self.removeAddress = function (address) { 
    self.addresses.remove(address); 
} 
} 

e associarlo con:

ko.applyBindings(new personViewModel(person), $("#person")[0]); 

funziona benissimo sul primo tempo, ma se mi legano con un altro oggetto su una seconda volta, la prima volontà vincolante non scomparire

Come posso passare facilmente la persona oggetto nel mio viewModel?

risposta

14

Vorrai praticamente che l'intero modello di visualizzazione sia osservabile, quindi scambiare un nuovo oggettoViewModel person. Sarebbe come:

var viewModel = { 
    person: ko.observable() 
}; 

viewModel.person(new personViewModel(person)); 

ko.applyBindings(viewModel); 

Poi, basta scambiare una nuova persona dentro come:

viewModel.person(new personViewModel(newPerson)); 
+0

grande soluzione. Molto pulito e semplice. Non sono stato soddisfatto dell'utilizzo di una variabile globale per viewModel ma non avevo idea di come aggirarlo. Grazie per questo –

Problemi correlati