2017-05-28 2 views
0

Ich habe eine kleine Demo fiddle, und ich möchte die Liste aktualisieren, wenn ich die Name Eigenschaft eines Elements des Arrays ändern. Wie ich verstehe, muss ich alle Gegenstände als Observable machen. Wie kann ich es tun?Alle Objekte der beobachtbaren Array eine beobachtbare machen

this.allItems = ko.observableArray([{name:"Fries"}, {name:"Eggs Benedict"}, {name:"Ham"}, {name:"Cheese"}]); 
+1

Sie finden das 'mapping' Plugin verwenden:' ko.mapping.fromJS ([{...}]) '(http://knockoutjs.com/documentation/plugins- mapping.html) – haim770

Antwort

1

Sie definieren eine Methode, die ein Objekt mit einer beobachtbaren name Eigenschaft gibt:

var makeNameObservable = function(obj) { 
    return { 
    name: ko.observable(obj.name) 
    }; 
}; 

Sie können dann map verwenden Ihr Array zu transformieren:

this.allItems = ko.observableArray([ /* ... */ ].map(makeNameObservable)); 

Regel in Knockout-Anwendungen Diese Objekte werden Viewmodels genannt und mit einem Konstruktor instanziiert. Zum Beispiel:

var Food = function(name) { 
    this.name = ko.observable(name); 
}; 

Food.fromObj = function(obj) { 
    return new Food(obj.name); 
}; 

// Elsewhere: 
var myFoods = [ { name: "Fries" } ].map(Food.fromObj); 
Verwandte Themen