2014-10-09 111 views
1

我已经实施了一个dijit树与复选框按照http://jsfiddle.net/5QcFY/14/提供的实施,这是工作得很好。我在对话框中显示树。有“类别”作为父节点,“类型”作为子节点。最初,所有父节点都显示为折叠状态。一旦用户从树中的子节点选择选项并关闭对话框,选定的项目将传递给进一步的处理逻辑。dijit.Tree没有崩溃时重新加载

下面是我的实现:

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"); 

现在的问题是:当用户再次打开该对话框,之前展开的类别仍显示扩张。正因为如此,树的元素加载速度变慢。即使关闭浏览器窗口并再次打开,我仍然可以看到之前扩展的类别。我尝试销毁为复选框创建的对象的引用,但问题仍然存在。

任何与此问题有关的指针将非常感激。

回答

1

persist属性是你在找什么,似乎:

启用/禁用使用Cookie状态保存的。

默认情况下,树会记住哪些分支被打开/关闭。至 使用此功能,您必须为树指定一个ID。要禁用 功能,请将“persist”参数设置为false。

http://dojotoolkit.org/reference-guide/1.10/dijit/Tree.html#persistence

有点混乱,在API docs有以下说关于autoExpand属性(我看你已经尝试过):

完全展开负荷树。覆盖持续。

看起来这只适用于autoExpand: true。正如您所见,使用persist: true(这是默认设置)也会覆盖autoExpand: false

http://jsfiddle.net/5QcFY/336/

+0

帮助正是如此。万分感谢。 – 2014-10-10 03:40:25