在ExtJS中编写自定义阅读器

时间:2012-05-15 09:23:37

标签: extjs extjs4

我是ExtJS的新手并正在玩它,我从服务器接收以下JSON,如下所示

{"tid":1,"action":"HelloWorld","method":"getData",
  "result": {"InstId":"1",
    "value":  [
  {"country.stateId":"101", "country.stateName":"TA"},
  {"country.stateId":"102", "country.stateName":"ABC"}, 
  {"country.stateId":"103", "country.stateName":"DEF"}]}",
                  "type":"rpc"}

我需要从上面的JSON中提取值并填充组合框。为了完成这项工作,我需要编写一个自定义Reader来读取和填充组合框。你们中的任何人都可以帮我写一个自定义读者吗?

以下是各种代码段

Ext.define('AM.store.TestStore', {

  extend: 'Ext.data.Store',

  alias : 'widget.testStore',
  model: 'AM.model.TestModel',
  autoload:true,
  proxy: {
      type: 'direct',

      directFn: HelloWorld.getData,
      extraParams:[ {'InstId': '1', 'boxid':'id'},
                    {'InstId': '1', 'name':'states'}
   ],

   reader:{
         type:'json',
         root:'result'

  }
  });

以下是视图对象

Ext.define('AM.view.combobox.TestView' ,{
    extend: 'Ext.form.ComboBox',
    alias : 'widget.TestView',
    fieldLabel: 'States',
    store:'TestStore',
    renderTo: Ext.getBody(),
    displayField: 'country.stateName',
    valueField: 'country.stateId',
    autoselect:false

});

以下是我的模型对象

Ext.define('AM.model.TestModel', {
    extend: 'Ext.data.Model',

    alias : 'widget.TestModel',
    fields: [ {name: 'country.stateId'}, {name: 'country.stateName'}]
);

以下是我的控制器

Ext.define('AM.controller.Funds', {
     extend: 'Ext.app.Controller',
     alias : 'widget.FundsController',
     views: ['combobox.TestView'],
     stores: ['TestStore'],
     models:['TestModel']
);

有人可以帮我写一个自定义的JSON Reader吗?

感谢
Phani Kumar

1 个答案:

答案 0 :(得分:2)

您无需为此编写自定义阅读器。我认为在你的代码中做一些小改动就足够了:

首先,在代理定义中:

root: 'value'
useSimpleAccessors: true

然后在您的数据模型中:

fields: [{
    name: 'id', mapping: 'country.stateId' }, {
    name: 'name', mapping: 'country.stateName' 
}]

应该这样做。