无法从函数

时间:2015-08-02 11:38:52

标签: knockout.js knockout-3.0

我有这个代码填充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" }
    ]
}

1 个答案:

答案 0 :(得分:1)

问题是,在尝试在其上调用submodules之前,您不确定迭代对象上是否存在$.each属性。

试试这个:

if (moduleValue.submodules && moduleValue.submodules.length) {
    $.each(moduleValue.submodules, function(submoduleIndex, submoduleValue) {
        result.push(submoduleValue.name);
    });
}

另外,您是否考虑过使用ko.mapping插件?