我有一个延迟加载dijit.tree,我想在加载数据后在许多地方重用它。但是,如果我只是将其他树中的存储对象替换为包含最多数据的树,则节点都会扩展。我想修改商店,以便在将其设置为新树中的商店之前折叠所有项目。你能告诉我如何实现这一目标吗?
您不能将存储用于此目的,因为它不包含树节点状态的任何信息。这个"魔术"是通过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);
}
});
},
编辑:
如果将自动扩展标志传递给构造函数,则最初会显示树,并展开所有节点。
然后,您可以调用 collapseAll() 和 expandAll() 来分别折叠和展开树。http://livedocs.dojotoolkit.org/dijit/Tree-examples#id3