dijit.Tree在重新加载时不会崩溃

时间:2014-10-09 06:11:31

标签: dojo tree dijit.tree ibm-content-navigator

我根据http://jsfiddle.net/5QcFY/14/提供的实现实现了一个带有复选框的dijit树,并且工作正常。我在对话框上显示树。有"类别"作为父节点和"类型"作为孩子的节点。最初所有父节点都显示为折叠状态。一旦用户从树中的子节点中选择选项并关闭对话框,所选项就会传递给进一步的处理逻辑。

以下是我的实施:

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 个答案:

答案 0 :(得分:2)

persist属性正是​​您所寻找的,似乎:

  

启用/禁用使用Cookie进行状态保存。

     

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

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

有点令人困惑的是,API docsautoExpand属性有以下说法(我看到你已经尝试过了):

  

在加载时完全展开树。覆盖仍然存在。

这似乎只适用于autoExpand: true。正如您所见,使用persist: true(默认值)也会覆盖autoExpand: false

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