2012-03-24 16 views
8

Chcę zmienić obiekt w viewModel na inny, tego samego typu (np. Person). Jeśli mogę to zrobić: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); 
} 
} 

i powiązać go z:

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

działa świetnie na pierwszy raz, ale jeśli wiążę go z innego obiektu na drugi raz, pierwszy wiążącej woli nie znikają.

Jak mogę łatwo zmienić osobę obiektu w moim widokuModel?

Odpowiedz

14

Zasadniczo chcesz, aby twój cały model widoku był widoczny, a następnie zamień go w nowy obiekt personViewView. Byłoby jak:

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

viewModel.person(new personViewModel(person)); 

ko.applyBindings(viewModel); 

Następnie wystarczy zamienić w nową osobę jak:

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

doskonałym rozwiązaniem. Bardzo schludny i prosty. Byłem niezadowolony z używania zmiennej globalnej dla viewModel, ale nie miałem pojęcia, jak sobie z tym poradzić. Dzięki za to –

Powiązane problemy