knockout.js - Knockoutjs中的observable数组和映射插件有什么用

标签 knockout.js knockout-mapping-plugin

如果我的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/

相关文章:

javascript - 可观察数组的 knockout 映射插件困难

javascript - 使用 ko.mapping.fromJS 进行异步 ajax 调用后更新可观察的 knockout

javascript - 使用 TypeScript 和 RequireJS 进行knockout.mapping

javascript - 如何根据knockout.js中的嵌套列表项更新 View ?

knockout.js - Durandal 多个母版页

knockout.js - 将 ko.component 嵌套在 component.template 中

javascript - knockoutJS、requireJS 和 jQueryUI Datepicker 不能一起玩

jquery - knockout js css 多类绑定(bind)

javascript - 使用映射插件的 pureCompulated 属性

javascript - Knockout.js,如何更改映射的二维数组的值?