2012-05-15 15 views
2

我新的ExtJS的和我玩了,我從服務器接收以下JSON如下圖所示編寫自定義的閱讀器在ExtJS的

{"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和填充組合框。爲了完成這項工作,我需要編寫一個自定義閱讀器來讀取和填充組合框。有沒有人可以幫我寫一個自定義的閱讀器?

以下是各個片斷

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閱讀器嗎?

謝謝
Phani庫馬爾

回答

2

你不需要寫定製讀者爲。我認爲讓情侶在代碼中的微小變化就足夠了:

首先,在代理定義:

root: 'value' 
useSimpleAccessors: true 

然後在模型中爲您的數據:

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

應該這樣做。

+0

嗨,沙謝謝你的回覆。只是爲了我的學習,你可以幫我寫一個自定義閱讀器。請... – Patton

+1

編寫自定義閱讀器==閱讀ExtJs閱讀器類的源代碼,並更改任何你不喜歡的東西。 – sha

+0

嗨沙,你的回答給我一個例外。 「未捕獲的類型錯誤:無法讀取未定義的屬性'值' – Patton