dijit.tree 如何仅使用商店实现折叠所有功能?
Posted
技术标签:
【中文标题】dijit.tree 如何仅使用商店实现折叠所有功能?【英文标题】:dijit.tree how to implement a collapse all functionality using only store? 【发布时间】:2012-05-24 07:05:40 【问题描述】:我有一个延迟加载 dijit.tree,我想在加载数据后在许多地方重复使用它。但是,如果我只是将其他树中的存储对象替换为包含最多数据的存储对象,那么节点就会全部展开。我想修改商店,以便在将其设置为新树中的商店之前折叠所有项目。你能告诉我如何做到这一点吗?
【问题讨论】:
【参考方案1】:您不能为此使用存储,因为它不包含树节点状态的任何信息。这个“魔法”是通过TreeNode
执行的,见一些examples here
“完美解决方案”是找出需要扩展的路径,然后设置树的路径以遍历所需的树节点。
但是,由于您的延迟加载,您需要检查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
【讨论】:
看问题是,当我只将旧树的存储设置为新树的存储时,我看到节点完全按照它们在前一个树中的扩展。所以我认为它是基于商店的。 尝试使用 persist:false 如上所述?树上的点击会生成一个 cookie,用于在页面加载之间存储树路径,认为这可能是同一件事吗?您新创建的树是否会在“打开”子容器上触发 XHR? 确保 autoExpand 标志为 false,然后使用tree.set("path", [pathsArray]);
打开您想要打开的那些以上是关于dijit.tree 如何仅使用商店实现折叠所有功能?的主要内容,如果未能解决你的问题,请参考以下文章