如果我的JSON数据可以直接使用ko.observableArray转换,那么映射插件有什么用,因为据我所知映射插件用于将JSON转换为knockout对象。我是KO新手,不太了解
最佳答案
observableArray 的元素本身不会自动被观察;对 observableArray 的订阅(包括绑定(bind))响应数组本身的更改(例如添加或删除元素),但不响应单个元素内容的更改。如果您希望后者发生,您需要将数组中每个对象的(相关)属性转换为可观察的属性,这就是映射插件为您所做的事情。
考虑:
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');
第二个列表发生变化
关于knockout.js - Knockoutjs中的observable数组和映射插件有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19928891/