我有一个延迟加载dijit.tree,我希望在加载数据后在很多地方重用它。但是,如果我只是将其他树中的商店对象替换为包含大多数数据的商店对象,则节点将全部展开。我想修改商店,以便在将其设置为新树中的商店之前折叠所有商品。你能告诉我如何实现这个目标吗?
答案 0 :(得分:2)
您不能使用商店,因为它不包含树节点状态的任何信息。这个“魔术”是通过TreeNode
执行的,请参阅一些examples here
“完美的解决方案”是确定需要扩展哪些路径,然后设置树的路径以遍历所需的treenodes。
但是,由于您的延迟加载,您需要检查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标志传递给构造函数,则最初会显示Tree,并展开所有节点。
然后,您可以分别调用collapseAll()和expandAll()来折叠和展开树。 http://livedocs.dojotoolkit.org/dijit/Tree-examples#id3