ext js tree:Afterrender事件发生时如何动态加载节点?

时间:2013-03-25 01:03:43

标签: javascript extjs tree extjs4

主要任务是在加载树面板后使用ajax打开一个分支。用户不应该进行任何点击。它应该在页面加载后自行扩展。

我尝试使用afterrender事件以递归方式加载节点。但我无法获得当前的树对象。在这一步它是空的。

就像expandAll调用一样。此代码也不适用于Afterrender事件:

  tree.expandAll(function() {
     tree.getEl().unmask();
    toolbar.enable();
  });

那么,我如何使用ajax加载节点?

更新1: 上面的代码现在正在运行。我只是在“树”定义后添加此代码。 但问题仍然存在。如何使用ajax加载一个节点?

1 个答案:

答案 0 :(得分:0)

你不能像大多数例子一样使用树店吗?如果这样做,树将自动从商店请求节点,商店将从服务器加载东西。鉴于您的服务器代码可以发送给定特定节点的分支。

See the Sencha Kitchen Sink demos of a tree working against the server with a TreeStore.

如果您在Chrome中打开开发人员工具,请转到网络标签,然后展开树中的节点,您将看到TreeStore将通过从“get-nodes.php”请求数据自动加载该节点的子节点给定已扩展节点的id。

您只需在其上调用.expand()即可扩展节点。

如果这不起作用,你可以加载模型,当你拥有它时,将它添加到树中并像这样扩展父模型:

MyApp.model.MyTreeModel.load(someId, {
    success: function (record, operation) {
        // If the third param is true the search will be recursive from the supplied node
        var node = tree.getRootNode().findChild('id', someParentId, true);
        node.addChild(record);
        node.expand();
    },
    scope: this
}); 

你的问题有点宽泛,所以我希望这会对你有所帮助。

您可能需要查看Ext.data.NodeInterface documentation about how to manipulate trees.