2013-06-04 13 views
11

Ich möchte ein beobachtbares Array implementieren und innerhalb dieses Arrays sollte beobachtbare Objekte (JS-Objekt) sein. Und in der Ansicht wiederhole ich dieses Array und erhalte das Objekt und zeige die Objekteigenschaften. Nehmen wir an, es gibt ein Objekt wie folgt:Wie man knockout beobachtbare Objekte innerhalb beobachtbarer Array macht

{"name":"john","age":21,"address":"No 25"} 

Stellen Sie sich vor, das beobachtbare Array besteht aus Objekten wie oben.

Dann mag ich einzelnen Eigenschaft (z Namen) ein bestimmten Objekt und müssen sehen, um die Änderung in der Ansicht ändern.

Wie kann ich dies mit Knockout tun?

Danke.

Antwort

9

Wenn Sie Ihre Benutzer in einem viewModel einrichten und mit knockout mapping abbilden, sollten Sie das gewünschte Ergebnis erhalten. Etwas wie:

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

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

Auf diese Weise jede der zugeordneten Eigenschaften wird eine beobachtbar sein und wenn sie sich ändern, wird dies in Ihrem Markup widerspiegeln.

+0

Ab sofort scheint das Plugin in der Antwort verwiesen verwiesen. –

+0

Es funktioniert immer noch mit der neuesten Version von Knockout (3.4.0) –

2

Um das Modell in ein beobachtbares Ansichtsmodell zu konvertieren, können Sie ko.utils.arrayMap und ko.mapping.fromJS verwenden.

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

einfach ein neues Modell für Ihre Datenelemente definieren und jede Eigenschaft beobachtbar machen, wie folgt aus:

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

Wenn Sie Ihre Daten erhalten, eine Schleife über sie, schaffen sie ihre dataItemModel (die beobachtbare Eigenschaften hat) und fügen Sie diesen Artikel dann zu Ihrem ObservableArray hinzu.

Verwandte Themen