我有一个小小的演示fiddle,我希望在更改数组项的 name 属性时更新列表。据我所知,我必须将所有项目都视为可观察项目。我该怎么办?
this.allItems = ko.observableArray([{name:"Fries"}, {name:"Eggs Benedict"}, {name:"Ham"}, {name:"Cheese"}]);
答案 0 :(得分:1)
定义一个返回具有可观察name
属性的对象的方法:
var makeNameObservable = function(obj) {
return {
name: ko.observable(obj.name)
};
};
然后,您可以使用map
转换数组:
this.allItems = ko.observableArray([ /* ... */ ].map(makeNameObservable));
通常,在淘汰应用程序中,这些对象称为视图模型,并使用构造函数进行实例化。例如:
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);