【问题标题】:ExtJS TreeLoader IssueExtJS TreeLoader 问题
【发布时间】:2010-09-30 20:10:16
【问题描述】:

我对 ExtJS 不太熟悉,但正在做一个使用它的项目。

我们正在使用带有 TreeLoader 的 TreePanel,它在一次调用中从服务器加载所有节点数据。我们有一个事件,我需要访问树中每个节点的属性。我这样做的方法是使用 TreePanel 的 getNodeById 方法。问题是树面板似乎延迟加载节点,除非节点已经加载,否则无法使用 getNodeById 检索节点。

有没有办法强制加载所有节点?我最接近的是使用 TreeLoader 上的 preloadChildren 属性,但这仍然仅在加载包含子节点的父节点时才加载。

【问题讨论】:

    标签: javascript extjs treepanel


    【解决方案1】:

    如果您希望能够访问所有节点,则必须在第一次调用时加载完整的树结构。

    第一次调用的 JSON 响应应该包括所有的树节点。例如:

    [{
        id: 1,
        text: 'A leaf Node',
        leaf: true
    },{
        id: 2,
        text: 'A folder Node',
        children: [{
            id: 3,
            text: 'A child Node',
            leaf: true
        }]
    

    }]

    【讨论】:

    • 嗯,这就是我们拥有它的方式。使用您的示例,如果我执行 myTreePanel.getNodeById(3),它将给我未定义,除非我通过扩展其父级(或单击其父级并在加载器配置中将 preloadChildren 设置为 true)来强制它加载。
    • 是的,使用您的数据,我尝试了以下方法,但不起作用: var treePanel = new Ext.tree.TreePanel({ id: 'structure-panel', loader: new Ext.tree. TreeLoader({ dataUrl: 'data.html', preloadChildren: true, listeners: { load: function(){ alert(treePanel.getNodeById('3')); } } }), root: new Ext.tree.TreeNode( { id: '树根' }) }); treePanel.getLoader().load(treePanel.root);加载回调中的警报将具有“未定义”
    • 您能否发布示例代码和示例服务器响应与节点?谢谢。
    • 好的,我发现了问题。首先,您必须使用 Ext.tree.AsyncTreeNode 作为根节点。您需要做的另一件事是更改服务器响应 JSON,将“expanded: true”属性添加到所有非叶节点。
    • 我觉得没办法,就是这样。看看 ExtJs 论坛中的这个帖子:sencha.com/forum/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2013-06-07
    • 2011-02-24
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多