Knockoutjs递归地展开ko.observableArray

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Knockoutjs递归地展开ko.observableArray相关的知识,希望对你有一定的参考价值。

我有这种格式的javascript数组:

omega.franchiseInfo.rawdata = [{
                Id: "Main",
                Title: "Main",
                Type: "main",
                items: [{
                    Id: "Menu1",
                    Title: "Menu1",
                    Type: "menu",
                    items: [{
                        Id: "Menu1",
                        Title: "Menu1",
                        Type: "menu",
                        items: []
                    }]
                }]
            }];

每个项目都有一个属性项,这是一个包含其他项的数组。未指定数组的元素数。

我正在使用数组上的knockout映射插件使其成为observableArray。阵列的所有成员也成为可观察者。

omega.franchiseInfo.observableRawData = ko.mapping.fromJS(language.rawdata);

我想要完成的是然后打开omega.franchiseInfo.observableRawData以成为其原始的纯javascript格式。这意味着等于omega.franchiseInfo.rawdata。我知道有像ko.utils.unwrapObservable这样的淘汰方法,但javascript不是我的强项,我不能让它适合我的情况。另外我认为执行该工作的函数应该是递归的,以遍历数组中的所有项。

这是我的小提琴:

http://jsfiddle.net/KHFn8/931/

如果有人可以帮助我并提供有效的代码,我将非常感激。感谢您的时间和精力。

答案

JsFiddle

您可以将其转换回JavaScript对象,如下所示:

ko.toJS(omega.franchiseInfo.observableRawData);

以上是关于Knockoutjs递归地展开ko.observableArray的主要内容,如果未能解决你的问题,请参考以下文章

有人愤怒地使用带有 asp.net-mvc 的 Knockoutjs 吗? [关闭]

可观察数组中的淘汰赛搜索

递归问题

仅当我在新选项卡上打开时才会打开 KnockoutJs 链接

计算递归使用重复展开

硬币兑换算法中的递归是如何展开的?