2013-06-04 12 views
11

Chcę zaimplementować tablicę obserwowalną i wewnątrz tej tablicy powinny znajdować się obserwowalne obiekty (obiekt JS). I W widoku I iterating tej tablicy i pobieranie obiektu i pokazać właściwości obiektu. Powiedzmy, że istnieje obiekt taki jak następujący: Wyobraźmy sobie, że tablica obserwowalna składa się z obiektów takich jak powyżej.Jak robić obiekty obserwowalne Knockout wewnątrz obserwowalnej tablicy

Następnie Chcę zmienić pojedynczy nieruchomość (np nazwę) konkretnego obiektu i trzeba zobaczyć zmiany w widoku.

Jak mogę to zrobić, używając nokautu?

Dzięki.

Odpowiedz

9

Po skonfigurowaniu użytkowników w widoku modelu i zamapowaniu go na numer knockout mapping należy uzyskać pożądany wynik. Coś jak:

myObservableArray.push(new UserViewModel({"name":"john","age":21,"address":"No 25"})); 

var UserViewModel = function(data){ 
    var self = this; 
    ko.mapping.fromJS(data, {}, self);  
} 

ten sposób każdy z odwzorowanych właściwości będzie zaobserwować i kiedy zmieni, zostanie to odzwierciedlone w znacznikach.

+0

Na razie wtyczka wymieniona w odpowiedzi wydaje się być porzucona. –

+0

Nadal działa z najnowszą wersją Knockout (3.4.0) –

2

Aby przekonwertować model na model widoku obserwowalnego, można użyć ko.utils.arrayMap i ko.mapping.fromJS.

var source = [{"name":"john","age":21,"address":"No 25"}]; 
var vm = ko.utils.arrayMap(source, function (item) { 
    return ko.mapping.fromJS(item) 
}); 

See fiddle

2

Wystarczy zdefiniować nowy model dla elementów danych i uczynić nieruchomość zaobserwować, jak to:

var dataItemModel = function (name, age, address) { 
    this.name = ko.observable(name); 
    this.age = ko.observable(age); 
    this.address = ko.observable(address); 
} 

Po otrzymaniu danych, pętli nad nimi, tworzyć dataItemModel (który ma obserwowalne właściwości), a następnie dodaj ten element do swojego ObservableArray.

Powiązane problemy