2012-09-10 92 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