2012-08-23 24 views
1

我有一個類似於下面的JSON數據。加載具有不同子字段的JSON的TreeStore

{ 
    "divisions": [{ 
     "name": "division1", 
     "id": "div1", 
     "subdivisions": [{ 
      "name": "Sub1Div1", 
      "id": "div1sub1", 
      "schemes": [{ 
       "name": "Scheme1", 
       "id": "scheme1" 
      }, { 
       "name": "Scheme2", 
       "id": "scheme2" 
      }] 
     }, { 
      "name": "Sub2Div1", 
      "id": "div1sub2", 
      "schemes": [{ 
       "name": "Scheme3", 
       "id": "scheme3" 
      }] 
     } 

     ] 
    }] 
} 

我想讀入TreeStore這一點,但不能改變的子場(divisionssubdivisionsschemes)是相同的(例如,children)。

我該怎麼做到這一點?

回答

7

將嵌套JSON加載到TreeStore時,本質上子節點通過TreeStore.fillNode()方法和NodeInterface.appendChild()之間的遞歸調用進行加載。

dataRoot = reader.getRoot(data); 

的讀者getRoot()在讀者的buildExtractors()方法,這是你需要重寫什麼動態創建:

每個節點的子場的實際檢索該線路內TreeStore.onNodeAdded()完成爲了處理嵌套JSON中的不同子字段。下面是它是如何做:

Ext.define('MyVariJsonReader', { 
    extend: 'Ext.data.reader.Json', 
    alias : 'reader.varijson', 

    buildExtractors : function() 
    { 
     var me = this;  
     me.callParent(arguments); 

     me.getRoot = function (aObj) {     
      // Special cases 
      switch(aObj.name) 
      { 
       case 'Bill': return aObj[ 'children' ]; 
       case 'Norman': return aObj[ 'sons' ];      
      } 

      // Default root is `people` 
      return aObj[ 'people' ]; 
     }; 
    } 
}); 

這將能夠解釋這樣的JSON:

{ 
    "people":[ 
     { 
     "name":"Bill", 
     "expanded":true, 
     "children":[ 
      { 
       "name":"Kate", 
       "leaf":true 
      }, 
      { 
       "name":"John", 
       "leaf":true 
      } 
     ] 
     }, 
     { 
     "name":"Norman", 
     "expanded":true, 
     "sons":[ 
      { 
       "name":"Mike", 
       "leaf":true 
      }, 
      { 
       "name":"Harry", 
       "leaf":true 
      } 
     ] 
     } 
    ] 
} 

爲全面工作的代碼見this JsFiddle

相關問題