不能从函数中 return a ko.observableArray
Can't return a ko.observableArray from a function
我有这段填充 observableArray 的代码。它循环遍历一个名为 modules 的数组,并将每个项目一个一个地推送到 observableArray 上。现在 modules 数组上的每个项目都有一个名为 submodules 的数组。我试图将这个子模块变成一个 observableArray。
我在下面隔离了不起作用的代码。我总是从 jQuery 收到 "Uncaught TypeError: Cannot read property 'length' of undefined" 的控制台错误。此外,我已经尝试 ko.observableArray(moduleValue.submodules) 到 return 一个用于子模块的 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" }
]
}
问题是在尝试调用 $.each
之前,您没有确保 submodules
属性 确实存在于迭代对象上。
试试这个:
if (moduleValue.submodules && moduleValue.submodules.length) {
$.each(moduleValue.submodules, function(submoduleIndex, submoduleValue) {
result.push(submoduleValue.name);
});
}
此外,您是否考虑过使用 ko.mapping
插件?
我有这段填充 observableArray 的代码。它循环遍历一个名为 modules 的数组,并将每个项目一个一个地推送到 observableArray 上。现在 modules 数组上的每个项目都有一个名为 submodules 的数组。我试图将这个子模块变成一个 observableArray。
我在下面隔离了不起作用的代码。我总是从 jQuery 收到 "Uncaught TypeError: Cannot read property 'length' of undefined" 的控制台错误。此外,我已经尝试 ko.observableArray(moduleValue.submodules) 到 return 一个用于子模块的 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" }
]
}
问题是在尝试调用 $.each
之前,您没有确保 submodules
属性 确实存在于迭代对象上。
试试这个:
if (moduleValue.submodules && moduleValue.submodules.length) {
$.each(moduleValue.submodules, function(submoduleIndex, submoduleValue) {
result.push(submoduleValue.name);
});
}
此外,您是否考虑过使用 ko.mapping
插件?