2

如果我的 JSON 数据可以直接使用 ko.observableArray 进行转换,那么 Mapping 插件有什么用,因为据我所知,映射插件用于将 JSON 转换为淘汰对象。我是KO新手,对它了解不多

4

1 回答 1

2

an 的元素observableArray本身不会自动观察到。订阅(包括绑定)observableArray响应数组本身的更改(例如添加或删除元素),但不响应单个元素内容的更改。如果您希望后者发生,您需要将数组中每个对象的(相关)属性转换为observables,这就是映射插件为您所做的。

考虑:

var vm={};
vm.dummy=[{num:'one'}, {num:'two'}, {num:'three'}, {num:'four'}];
// Create observableArray of plain objects
vm.oa1=ko.observableArray(vm.dummy);
// Create observableArray of objects with observable properties
vm.oa2=ko.mapping.fromJS(vm.dummy);
ko.applyBindings(vm);

随着:

<ul data-bind="foreach: oa1"><li data-bind="text: num"></li></ul>
<ul data-bind="foreach: oa2"><li data-bind="text: num"></li></ul>

现在在控制台中:

vm.oa1()[1].num = 'five'

显示没有任何变化

vm.oa1()[1].num

vm.oa1()[1].num('five');

错误,因为该元素不是可观察的

vm.oa2()[1].num('five');

第二个列表发生变化

于 2013-11-12T15:50:07.097 回答