2012-05-24 42 views
2

我有一個懶惰的加載dijit.tree,我想在其數據加載後在許多地方重用。但是,如果我只是將其他樹中的商店對象替換爲包含大多數數據的商店對象,則節點將全部展開。我想修改商店,以便在將所有商品設置爲新樹中的商店之前將其摺疊。你能告訴我如何做到這一點?dijit.tree如何使用唯一的商店實現摺疊所有功能?

回答

2

您不能使用此存儲,因爲它不包含有關樹節點狀態的任何信息。這種「魔力」通過TreeNode執行,看到一些examples here

「完美解決方案」會找出你需要擴大其路徑,然後設置你的樹的遍歷到想要的樹節點的路徑。

但是,由於您的延遲加載,您需要檢查state - 初始化樹時應該是UNCHECKED。但是,有這可能是踢在cookie中的功能內置,確保創建新樹與{ persist:false }

您還可以擴展你的樹,所以它將接受collapseChildren(TreeNode)如下 - 然後調用tree.set("path", [pathsArray]);

collapseChildren : function(top) { 
     var self = this; 
     if(!top || !self.model.mayHaveChildren(top.item)) return; 
     top.getChildren().forEach(function(n) { 
       if(n.item.children) { 
         //dojo.style(n.getParent().containerNode, { overflowY: 'hidden', overflowX: 'hidden'}); 
         self._collapseNode(n); 
         self.collapseChildren(n); 
       } 
     }); 
}, 

編輯:

如果自動擴展標誌傳遞給構造,樹最初顯示具有擴展的所有節點。

然後,您可以分別調用collapseAll()和expandAll()摺疊並展開樹。 http://livedocs.dojotoolkit.org/dijit/Tree-examples#id3

+0

看的問題是,當我設置只有老樹的新樹的商店的店,我看到的節點展開,正是因爲他們在前面的樹。所以我認爲它是基於商店的。 – MozenRath

+0

嘗試使用persist:false如上所述?樹上的點擊會生成一個cookie,用於在頁面加載之間存儲樹形路徑,認爲它可能與此處相同?您新創建的樹在'開放'子容器上觸發XHR嗎? – mschr

+0

只有當孩子還沒有填充時,他們​​纔會觸發xhr – MozenRath