不能从函数中 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 插件?