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

Posted

技术标签:

【中文标题】dijit.Tree 重新加载时不会崩溃【英文标题】:dijit.Tree not collapsing when reloaded 【发布时间】:2014-10-09 06:11:30 【问题描述】:

根据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】:

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

启用/禁用使用 cookie 来保存状态。

默认情况下,树会记住打开/关闭了哪些分支。到 使用此功能,您必须为 Tree 指定一个 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/

【讨论】:

以上是关于dijit.Tree 重新加载时不会崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Nuxt:页面重新加载时页面崩溃

UICollectionView 重新加载(崩溃)

重新加载数据时 Tableview 崩溃

从图层重新加载 tableView 时崩溃

频繁重新加载collectionView时崩溃

重新加载表数据时我的应用程序崩溃[关闭]