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