javascript - 如何用递归对象 extjs 填充商店?

标签 javascript extjs recursion tree

我有一个具有这种结构的对象

首先 最后的 uid ID 关系[]

Rels 是一个数组,再次包含具有相同结构的对象。 我如何管理此对象以在负载中使用 extjs 填充 treeStore?我需要维护父子之间的层次结构

例子

parent
child 1
child 2
侄子 1
侄子 2

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

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

这是我的代码(不工作)

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 但它给我和 错误 例如 object is not a function

我该怎么办?

提前致谢

最佳答案

您应该使用 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());

关于javascript - 如何用递归对象 extjs 填充商店?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20470077/

相关文章:

javascript - 无法格式化/解析此日期

javascript - 使用 Object() 创建数字和字符串

extjs - Ext JS 选项卡面板 - 动态选项卡 - 选项卡存在不工作

javascript - ExtJS 数据网格列渲染器具有多个值

javascript - 带有 onclick 的 href 在 Safari 中不起作用

extjs - 具有相同存储 Ext JS 的网格的问题

javascript - JavaScript中的十进制到二进制递归函数

PHP分层数组 - parent 和 child

javascript - 为什么我需要一个包装函数来递归调用 setTimeout

Javascript 将正则表达式与组匹配