我有一个包含数组数组的JSON结构。我有一个View Model,它使用包含Observable数据的Observable Arrays定义对象,然后将这些对象嵌套在其他Arrays和Observable中。
加载包含包含Observable数据的嵌套Observable Arrays的View Model的最简单方法是什么?
答案 0 :(得分:3)
您可以使用映射插件进行探索,但是选项对象会变得复杂,因为每个创建回调都必须再次调用映射插件,然后添加任何dependentObservables,并且更容易使所有属性都可观察。
你可以坚持你的构造函数并使用类似ko.utils.arrayMap
的东西,这只是一个循环数组的简单函数,并将每个项目重新映射到你从你提供的函数返回的任何内容。
以下是添加了ko.utils.arrayMap
次调用的示例:
http://jsfiddle.net/rniemeyer/VUfSS/
答案 1 :(得分:0)
更新:如果您的嵌套列表依赖于主列表,这是您的解决方案,否则@ rp-niemeyer解决方案是最好的。
如果我做对了,就说你有这样的JSON数据:
{
appId: 1,
appName: 'my app 1',
modules:[
{module1:1, moduleName: 'module 1'}, {module1:2, moduleName: 'module 2'}]
},
{
appId: 2,
appName: 'my app2',
modules:[
{module1:3, moduleName: 'module 3'}, {module1:4, moduleName: 'module 4'}]
}
这将是你的viewModel:
function myViewModel(){
var self = this;
self.appList = ko.observableArray(data);
self.moduleList = ko.observableArray([]);
// Set selectedApp in order to fill modulesList
self.selectedApp = ko.observable();
self.selectedApp.subscribe(function(v){
// updates module list whenever selected app gets value.
moduleList(v.modules);
});
}
我没有测试它,但我确信你已经有了这个想法。