2012-09-10 93 views
0

我有這樣的JSON。檢索商店記錄

{ 
    "children":[ 
     {"name": "subdivision1","id": "subdiv1","type": "subdiv","children":[ 
      {"name": "Scheme1","id": "scheme1","type": "scheme","children":[ 
       {"name": "Nathuji","id": "nathuji","type": "datalogger","leaf":true}, 
       { "name": "Tarsang","id": "tarsang","type": "datalogger","leaf":true}, 
       { "name": "Mithapur","id": "mithapur","type": "datalogger","leaf":true}, 
       { "name": "Samali","id": "samali","type": "datalogger","leaf":true}]}, 
      {"name": "Scheme2","id": "scheme2","type": "scheme","children":[ 
       { "name": "Bhunidra","belongsto": "scheme2","id": "bhunidra","type": "datalogger","leaf":true}, 
       { "name": "Chhogala","belongsto": "scheme2","id": "chhogala","type": "datalogger","leaf":true}] 
       }]}, 
     {"name": "subdivision2","id": "subdiv2","type": "subdiv","children":[ 
      {"name": "Scheme3","id": "scheme3","type": "scheme","children":[ 
       { "name": "Thana Savli","belongsto": "scheme3","id": "thanasavli","type": "datalogger","leaf":true}, 
       { "name": "Padardi","belongsto": "scheme3","id": "padardi","type": "datalogger","leaf":true}] 
       }]}]} 

模型是這樣的。

Ext.define('DemoApp.model.dataloggerhierarchymodel',{ 
    extend: 'Ext.data.Model', 
    fields: ['name','id','type'], 
    proxy: { 
     type: 'ajax', 
     api: { 
      read: 'data/allschemes.json' 
     }, 
     reader: { 
      type: 'json', 
      root: 'children' 
     } 
    } 
}); 

這樣的商店。

Ext.define('DemoApp.store.dataloggerhierarchystore',{ 
    extend: 'Ext.data.TreeStore', 
    model: 'DemoApp.model.dataloggerhierarchymodel', 
    autoLoad: true, 
    listeners: { 
     load:function(){ 
      console.log('Datalogger Tree store loaded'); 
     } 
    }, 
    root: { 
     expanded: true 
    } 
}); 

我訪問它的控制器一樣,

var schemesStore = this.getDataloggerhierarchystoreStore(); 
     if(schemesStore == null || schemesStore == undefined){ 
      console.log('Store Undefined'); 
     } 
     for(var i = 0; i< schemesStore.count();i++) 
      { 
       console.log('Record - '+schemesStore[i].get('id')); 
      }; 

     schemesStore.each(function(currentRecord){ 
      console.log(currentRecord.get('id')); 
     }); 

我在樹屏顯示出來,並且能正常工作。現在我想從商店訪問每條記錄。 但我得到錯誤count()不是一個函數。在totalCount(),each()的情況下也是如此。我在這裏錯過了什麼?我如何從商店訪問個人記錄?

回答

2

不幸的是,Ext.data.TreeStore不是Ext.data.Store的子類。它並不具備普通商店所做的所有方法。爲了訪問數據,您必須使用getRootNode()並使用Ext.data.NodeInterface中定義的方法訪問根節點。

NodeInterface提供的cascadeBy()方法相當於each(),您必須使用它來編寫自己的count()方法。

+0

但是'NodeInterface'如何訪問每個字段?假如我想要檢索'id'和'name',我怎麼才能通過當前的'NodeInterface'獲取? – liaK

+0

我的意思是和普通商店中的get()函數類似嗎? – liaK

+0

'NodeInterface'中的方法用於修飾模型。所以你仍然可以在單個節點上使用get()。基本上,它將您的記錄變成樹節點。 – Eric