我有这个代码填充observableArray。它循环遍历一个名为modules的数组,并逐个推送observableArray上的每个项目。现在,modules数组上的每个项目都有一个名为submodules的数组。我试图将这个子模块变成一个observableArray。
我已经隔离了下面不起作用的代码。我总是有一个控制台错误“uncaught TypeError:无法读取未定义的属性'长度'来自jQuery。另外,我尝试过ko.observableArray(moduleValue.submodules)为子模块返回一个observableArray并且它可以工作,但是如果可能的话,我需要能够让下面的构造工作。
// Loop through items.
$.each(arr, function(key, value) {
// Loop through modules.
$.each(value, function(moduleIndex, moduleValue) {
self.modules.push({
name: moduleValue.name,
//
// Can't make this work
// Shouldn't this return an observableArray?
//
submodules: function() {
var result = ko.observableArray();
// Loop through submodules.
$.each(moduleValue.submodules, function(submoduleIndex, submoduleValue) {
result.push(submoduleValue.name);
});
return result;
}()
});
});
});
修改
根据要求,值或arr:
{
"modules" : [
{
"name" : "Companies",
"submodules" : [
{ "name" : "All Companies" },
{ "name" : "All Active" },
{ "name" : "All Inactive" }
]
},
{ "name" : "Settings" }
]
}
答案 0 :(得分:1)
问题是,在尝试在其上调用submodules
之前,您不确定迭代对象上是否存在$.each
属性。
试试这个:
if (moduleValue.submodules && moduleValue.submodules.length) {
$.each(moduleValue.submodules, function(submoduleIndex, submoduleValue) {
result.push(submoduleValue.name);
});
}
另外,您是否考虑过使用ko.mapping
插件?