使可观察数组的所有项都可观察

时间:2017-05-28 20:58:53

标签: knockout.js

我有一个小小的演示fiddle,我希望在更改数组项的 name 属性时更新列表。据我所知,我必须将所有项目都视为可观察项目。我该怎么办?

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

1 个答案:

答案 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);