3

我正在尝试使用敲除映射插件仅使一个键可观察。数据是一个对象数组:

var data = {
    people: [
        {id: 1, age: 25}, 
        {id: 2, age: 35}
    ]
};

age应该是可观察的。我试过这些选项:

var mappingOptions = {
    "observe": [ "people.age" ]
    // "observe": [ "people[].age" ]
    // "observe": [ "people[0].age" ]    // Works, but not what I need
}

文档显示我可以在特定索引处观察对象的键,但这不是我想要的,因为我的数据是动态的,此外我希望所有对象都具有可观察到的键。不幸的是,文档中没有记录这种确切的用法(无论如何,此时)。

有人让这个工作吗?jsfiddle在这里

4

1 回答 1

4

由于该observe选项的集合处理能力有限(因此您需要编写"observe": [ "people[0].age","people[1].age", etc ]以使其工作,因为您已经想通了)推荐的模式是为您的集合使用一个create函数。people

在您的自定义create创建功能中,您可以ko.mapping.fromJS使用您的作为映射选项再次调用{ observe: ["age"] },这将创建所需的项目:

var data = {
    people: [
        {id: 1, age: 25}, 
        {id: 2, age: 35}
    ]
};
var mappingOptions = {
    people: {
        create: function(options) {
            return ko.mapping.fromJS(options.data, { observe: ["age"] });
        }
    }
}
var r = ko.mapping.fromJS(data, mappingOptions);

演示JSFiddle

于 2013-09-01T13:06:09.757 回答