2015-03-02 61 views
0

我環顧四周,但我仍然不明白如何正確創建treestore。 我有這個非常簡單的JSON,我從服務器獲取:EXTJS 5.1 JSON非常簡單的TreeStore

{ 
    "Results": [ 
    { 
     "name": "John", 
     "age": 23, 
     "cars": [ 
     { 
      "name": "Clio", 
      "brand": "Renault" 
     }, 
     { 
      "name": "Class S", 
      "brand": "Mercedes" 
     } 
     ] 
    }, 
    { 
     "name": "Michel", 
     "age": 42, 
     "cars": [ 
     { 
      "name": "Qashqai", 
      "brand": "Nissan" 
     } 
     ] 
    } 
    ] 
} 

我有兩個型號:

Ext.define('Person', { 
    extend: 'Ext.data.Model', 
    fields: [ 'name', 'age'] 
}); 

Ext.define('Car', { 
    extend: 'Ext.data.Model', 
    fields: [ 'name', 'brand'] 
}); 

現在我知道我要創建一個樹商店,但在所有的例子我已經看到,json中總是有一個「兒童」屬性,我沒有。

如何使用以下json創建樹存儲?

非常感謝:)!

回答

2

你總是可以建立類似如下的數據正確格式的對象:

Ext.application({ 
    name: 'Fiddle', 

    launch: function() { 

     var myTreeData = { 
       "Results": [{ 
        "name": "John", 
        "age": 23, 
        "cars": [{ 
         "name": "Clio", 
         "brand": "Renault" 
        }, { 
         "name": "Class S", 
         "brand": "Mercedes" 
        }] 
       }, { 
        "name": "Michel", 
        "age": 42, 
        "cars": [{ 
         "name": "Qashqai", 
         "brand": "Nissan" 
        }] 
       }] 
      }, 
      modifiedData = { 
       expanded: true, 
       children: [] 
      }; 
     myTreeData.Results.forEach(function (result) { 
      var newChildrenArray = []; 
      result.cars.forEach(function (car) { 
       var newChild = { 
        text: car.name, 
        leaf: true 
       }; 
       newChildrenArray.push(newChild); 
      }); 
      var person = { 
       text: result.name, 
       leaf: (newChildrenArray.length > 0 ? false : true), 
       children: newChildrenArray 
      }; 
      modifiedData.children.push(person); 
     }); 

     var store = Ext.create('Ext.data.TreeStore', { 
      root: modifiedData 
     }); 

     Ext.create('Ext.tree.Panel', { 
      title: 'Simple Tree', 
      width: 200, 
      height: 150, 
      store: store, 
      rootVisible: false, 
      renderTo: Ext.getBody() 
     }); 
    } 
}); 

演示在這裏:https://fiddle.sencha.com/#fiddle/j05

+0

即使我不想修改JSON(因爲我有一個10mo從服務器接收的json文件),我認爲你是對的,還有其他方法。 我認爲有一些配置會說「汽車是兒童財產」,或類似這樣的^^。 非常感謝您的幫助羅布:)! – JkSuf 2015-03-02 15:57:47

+1

@Jsu你也可以看看這個答案http://stackoverflow.com/a/12092938/1672632有另一種方法。 – 2015-03-03 08:05:15