我已经按照上提供的实现实现了一个带有复选框的dijit树http://jsfiddle.net/5QcFY/14/这非常有效。我正在对话框上展示这棵树。有"类别"作为父节点,有"类型"作为子节点。最初,所有父节点都显示为折叠。一旦用户从树的子节点中选择选项并关闭对话框,所选项目就会被传递到进一步的处理逻辑。
以下是我的实现:
typeTreeHandle = new dijit.Tree({
store: dataStore,
id: "docTree",
showRoot: false,
autoExpand: false,
_createTreeNode: function(args) {
var tnode = new dijit._TreeNode(args);
tnode.labelNode.innerHTML = args.label;
//As parent nodes don't need checkboxes
if (!args.isExpandable)
{
var cb = new dijit.form.CheckBox();
cb.set('checked', false);
cb.placeAt(tnode.labelNode, "first");
//To store reference of checkbox object to destroy afterwards.
checkBoxArr.push(cb);
dojo.connect(cb, "onChange", function() {
var treeNode = dijit.getEnclosingWidget(this.domNode.parentNode);
dojo.publish("/checkbox/clicked", [{
"checkbox": this,
"item": treeNode.item}]);
});
}
return tnode;
}
}, "myTree");
现在的问题是:当用户再次打开对话框时,以前展开的类别仍然显示为展开。因此,树元素的加载变得更慢。即使我关闭浏览器窗口并再次打开,我仍然可以看到以前扩展的类别。我尝试销毁为复选框创建的对象的引用,但问题仍然存在。
任何与此问题相关的指针都将不胜感激。
persist
属性似乎是您要查找的:
启用/禁用使用Cookie保存状态。
默认情况下,树将记住打开/关闭了哪些分支。到使用此功能时,必须为树指定一个id。要禁用特性,将"persistent"参数设置为false。
http://dojotoolkit.org/reference-guide/1.10/dijit/Tree.html#persistence
令人困惑的是,API文档对autoExpand
属性有以下说明(我看到您已经尝试过了):
加载时完全展开树。覆盖持续存在。
这似乎只适用于autoExpand: true
。如您所见,使用persist: true
(默认值)也会覆盖autoExpand: false
。
http://jsfiddle.net/5QcFY/336/