微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-如何使用递归对象extjs填充存储?

我有一个具有这种结构的物体

第一
持续
uid
ID
rels []

Rels是一个数组,其中再次包含具有相同结构的对象.
如何在负载中使用extjs来管理此对象以填充treeStore?我需要保持父母与子女之间的等级关系


父母
小孩1
小孩2
 侄子1
 外phe2

等等.它们都在父节点下.

有什么建议吗?我尝试使用递归函数,但没有结果的几种方式.

这是我的代码(不起作用)

Ext.define('utenti', {

    extend: 'Ext.data.Model',
    fields: [{
            name: 'F',
            type: 'string'
        },
        {
            name: 'L',
            type: 'string'
        },
        {
            name: 'Uid',
            type: 'string'
        },
        {
            name: 'Id',
            type: 'string'
        }
    ]
});

var TreeUserStore = Ext.create('Ext.data.TreeStore', {
    model: 'utenti',
    root: {
        text: 'Root',
        //id: 'Radice_utenti',
        expanded: true
    },
    listeners: {

        load: function eachRecursive(ResObj) {
            var childNode;
            if (ResObj.Rels.length > 0) {
                for (i = 0; i < data.Rels.length; i++) {
                    eachRecursive(ResObj.Rels[i]);

                }
            } else {
                childNode = Ext.create('utenti', {
                    F: ResObj.F,
                    L: ResObj.L,
                    Uid: ResObj.Uid,
                    Id: ResObj.Id
                });
                TreeUserStore.appendChild(child);
            }
        }
    }


});

我找到了从对象中提取数据的函数

function eachRecursive(ResObj, parent) {

    if (ResObj.Rels.length > 0) {

        var childNodeModel = {
            name: ResObj.F + " " + ResObj.L,
            text: ResObj.F + " " + ResObj.L,
            leaf: false,
            children: []
        };

        alert("padre:" + parent.name + ", figlio:" + childNodeModel.name);
        parent.children.push(childNodeModel);

        for (var i = 0; i < ResObj.Rels.length; i++) {
            eachRecursive(ResObj.Rels[i], childNodeModel);
        }
    } else {
        var childNodeModel = {
            name: ResObj.F + " " + ResObj.L,
            text: ResObj.F + " " + ResObj.L,
            leaf: true
        };
        alert("padre:" + parent.name + ", figlio:" + childNodeModel.name);
        parent.children.push(childNodeModel);

    }

}

但是目前,我无法在TreePanel中显示元素.我尝试使用appendChild,但是没有任何结果,我也尝试创建TreeNode,但是它给了我并且错误(例如对象不是函数).

我能怎么做?

提前致谢

解决方法:

您应该使用appendChild节点的方法将子节点添加到层次结构中.

您的递归函数应如下所示:

function eachRecursive(ResObj, parent) {

    if (ResObj.Rels.length > 0) {

        var childNodeModel = {
            name: ResObj.F + " " + ResObj.L,
            text: ResObj.F + " " + ResObj.L,
            leaf: false,
            children: []
        };

        var childNode = parent.appendChild(childNodeModel);

        for (var i = 0; i < ResObj.Rels.length; i++) {
            eachRecursive(ResObj.Rels[i], childNode);
        }
    } else {
        var childNodeModel = {
            name: ResObj.F + " " + ResObj.L,
            text: ResObj.F + " " + ResObj.L,
            leaf: true
        };
        parent.appendChild(childNodeModel);

    }
}

然后从根开始填充存储:

eachRecursive(data, TreeUserStore.getRootNode());

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐