我有一个填充observableArray的代码。它循环遍历一个名为模块的数组,并将每个项逐个推到observableArray上。现在,模块数组中的每个项都有一个名为子模块的数组。我正在尝试将这个子模块变成一个observableArray。
我已经隔离了下面不起作用的代码。我总是有一个控制台错误的“未定义的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" }
]
}发布于 2015-08-02 12:15:19
问题是,在尝试对迭代对象调用submodules之前,不能确保迭代对象上确实存在$.each属性。
试试这个:
if (moduleValue.submodules && moduleValue.submodules.length) {
$.each(moduleValue.submodules, function(submoduleIndex, submoduleValue) {
result.push(submoduleValue.name);
});
}另外,您考虑过使用ko.mapping插件吗?
https://stackoverflow.com/questions/31771531
复制相似问题