2009-11-06 146 views
3

我有一個基本的ExtJS問題,根據閱讀文檔和搜索,我似乎無法解決這個問題。目前我有一個TreePanel直接從URL加載JSON。我試圖從視圖中分離數據,以便我還可以使用該數據將數據提供給OpenLayers地圖(使用GeoExt)。如何將TreePanel指向Ext.data.Store而不是URL?樹的ExtJS數據存儲

+2

看起來情況在ExtJS 3.1中隨着TreeGrid組件的增加而改變:http://www.extjs.com/blog/2009/12/17/ext-js-3-1-massive-memory-改進 - treegrid-and-more%E2%80%A6/ – 2010-01-22 01:52:11

+0

警告:這個問題和答案是過時的(4歲)。我希望SO有辦法歸檔這些... – HDave 2013-11-07 14:06:32

回答

11

TreePanels使用TreeLoaders而不是Stores來加載數據。原因是樹需要分層數據,而存儲是平坦的表結構,不支持層次結構。基本數據對象也不同(記錄與節點)。當然,您可以使用父/子密鑰將自己的分層數據存儲在商店中,但此時沒有內置Ext組件的任何內容。如果您嘗試緩存樹數據,則可能需要爲此推出自己的解決方案。

編輯:現在Ext 4出來了,這個答案只適用於Ext 3。Ext 4現在有一個(大部分)統一的數據模型,並且樹使用TreeStore(具有應用於模型的附加NodeInterface),不再有一個單獨的TreeLoader類。

+5

感謝您回來並添加「post ExtJS 4」更新! – 2011-09-20 20:41:19

1

在您的TreePanel配置中,只需指向您的數據url即可。

loader: new Ext.tree.TreeLoader({ 
    url: '/path/to/data.json', 
    requestMethod: 'GET', 
    preloadChildren: true 
    }) 

如果你需要一個Store這個數據,它可以通過bmoeskau指出,由於數據格式可能不同,很麻煩。

0

在我們的應用程序中,我們使用了一個樹面板和一個dataview的組合,兩者都對數據(使用傳統樹加載器的樹)和使用存儲的數據視圖發出請求。兩者都提交到相同的URL,是的,有兩個調用,但結果返回適當的格式化視圖參數(樹或數據視圖)和結果相同,只是裝飾不同。

這將是一個理想的呼叫,中央數據,但這似乎工作可接受。

編寫幾個函數來抽象解析(記錄到節點),並最終獲得訪問數據的一般方法。

+1

這絕對是很多人的痛點。 Ext 4.0路線圖包含「關係型」商店,所以我們希望最終解決這個問題。 http://www.extjs.com/products/js/roadmap.php – 2010-04-09 08:35:35