2012-03-24 9 views
8

Quiero cambiar un objeto en un viewModel por otro, con el mismo tipo (por ejemplo, Person). Si hago esto: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); 
} 
} 

y enlazarlo con:

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

funciona muy bien en el primer tiempo, pero si me ato con un otro objeto en un segundo tiempo, la primera voluntad de unión no desaparecer

¿Cómo puedo cambiar fácilmente la persona objeto en mi viewModel?

Respuesta

14

Básicamente, usted querría que todo su modelo de vista sea observable, luego intercambie una nueva persona objetoViewModel. Sería como:

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

viewModel.person(new personViewModel(person)); 

ko.applyBindings(viewModel); 

Entonces, sólo cambio una nueva persona en como:

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

gran solución. Muy limpio y simple. No me gustó usar una variable global para viewModel, pero no tenía idea de cómo evitarlo. Gracias por esto –

Cuestiones relacionadas