首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能从函数返回ko.observableArray

不能从函数返回ko.observableArray
EN

Stack Overflow用户
提问于 2015-08-02 11:38:52
回答 1查看 364关注 0票数 2

我有一个填充observableArray的代码。它循环遍历一个名为模块的数组,并将每个项逐个推到observableArray上。现在,模块数组中的每个项都有一个名为子模块的数组。我正在尝试将这个子模块变成一个observableArray。

我已经隔离了下面不起作用的代码。我总是有一个控制台错误的“未定义的TypeError:无法读取属性‘长度’的未定义”从jQuery。另外,我尝试了ko.observableArray(moduleValue.submodules)为子模块返回一个observableArray,它可以工作,但是如果可能的话,我需要能够让下面的构造工作起来。

代码语言:javascript
复制
// 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:

代码语言:javascript
复制
{
    "modules" : [
        { 
            "name" : "Companies",
            "submodules" : [
                { "name" : "All Companies" },
                { "name" : "All Active" },
                { "name" : "All Inactive" }
            ] 
        }, 
        { "name" : "Settings" }
    ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-02 12:15:19

问题是,在尝试对迭代对象调用submodules之前,不能确保迭代对象上确实存在$.each属性。

试试这个:

代码语言:javascript
复制
if (moduleValue.submodules && moduleValue.submodules.length) {
    $.each(moduleValue.submodules, function(submoduleIndex, submoduleValue) {
        result.push(submoduleValue.name);
    });
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31771531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档