如果我的 JSON 数据可以直接使用 ko.observableArray 进行转换,那么 Mapping 插件有什么用,因为据我所知,映射插件用于将 JSON 转换为淘汰对象。我是KO新手,对它了解不多
问问题
211 次
1 回答
2
an 的元素observableArray
本身不会自动观察到。订阅(包括绑定)observableArray
响应数组本身的更改(例如添加或删除元素),但不响应单个元素内容的更改。如果您希望后者发生,您需要将数组中每个对象的(相关)属性转换为observable
s,这就是映射插件为您所做的。
考虑:
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 回答