我有一个延迟加载 dijit.tree,我想在加载数据后在许多地方重用它。但是,如果我只是将其他树中的存储对象替换为包含最多数据的存储对象,那么节点就会全部展开。我想修改商店,以便在将其设置为新树中的商店之前折叠所有项目。你能告诉我如何做到这一点吗?
问问题
1516 次
1 回答
2
您不能为此使用存储,因为它不包含树节点状态的任何信息。这种“魔法”是通过 执行的TreeNode
,请参见此处的一些示例
“完美解决方案”是找出需要扩展的路径,然后设置树的路径以遍历所需的树节点。
但是,由于您的延迟加载,您需要state
在初始化树时检查 - 它应该是UNCHECKED
. 但是有一个内置的 cookie 功能可能正在启动,请确保创建新树{ persist:false }
您还可以扩展您的树,以便它接受collapseChildren(TreeNode)
如下 - 然后调用tree.set("path", [pathsArray]);
collapseChildren : function(top) {
var self = this;
if(!top || !self.model.mayHaveChildren(top.item)) return;
top.getChildren().forEach(function(n) {
if(n.item.children) {
//dojo.style(n.getParent().containerNode, { overflowY: 'hidden', overflowX: 'hidden'});
self._collapseNode(n);
self.collapseChildren(n);
}
});
},
编辑:
如果将 autoExpand 标志传递给构造函数,则树最初会显示为所有节点都展开。
然后,您可以分别调用 collapseAll() 和 expandAll() 来折叠和展开树。 http://livedocs.dojotoolkit.org/dijit/Tree-examples#id3
于 2012-05-24T16:34:42.253 回答