2012-12-24 90 views
6

我使用ExtJS的3.4,我需要填充ComboBox數據如下:填充ExtJS的3.4組合框與本地JSON數據

"[{"cod_domini":"1","nom_domini":"Sant Esteve de Palautordera"},{"cod_domini":"2","nom_domini":"Parc Natural del Montseny"},{"cod_domini":"5","nom_domini":"Sant Pere de Vilamajor"},{"cod_domini":"6","nom_domini":"Santa Maria i Mosqueroles"}]" 

哪個來形成以前的XMLHttpRequest,我知道了存儲在一個變量這樣:

my_variable = "[{"cod_domini":"1","nom_domini":"Sant Esteve de Palautordera"},{"cod_domini":"2","nom_domini":"Parc Natural del Montseny"},{"cod_domini":"5","nom_domini":"Sant Pere de Vilamajor"},{"cod_domini":"6","nom_domini":"Santa Maria i Mosqueroles"}]" 

所以,我有以下的ExtJS的3.4組合框:

cbxSelDomini = new Ext.form.ComboBox({ 
          hiddenName: 'Domini', 
          name: 'nom_domini', 
          displayField: 'nom_domini', 
          valueField: 'cod_domini', 
          mode: 'local', 
          triggerAction: 'all', 
          listClass: 'comboalign', 
          typeAhead: true, 
          forceSelection: true, 
          selectOnFocus: true, 
          store: mystore 
}); 

這個組合箱suposed從一個Ext.data.Store獲取數據我命名「的MyStore」:

store: mystore = new Ext.data.Store({ 
            autoload: true, 
            reader: new Ext.data.ArrayReader(
             { 
              idIndex: 0 // id for each record will be the first element 
             }), 
            data: dataprova, 
            fields: [ 
                 {type: 'integer', name: 'cod_domini'}, 
                 {type: 'string', name: 'nom_domini'} 
                ] 
            }), 

我的第一個問題是,在第一種情況下,數據不會加載到數據存儲,甚至明確地告訴:mystore.loadData (my_variable);

有人可以試圖告訴我我做錯了什麼嗎?在fireBug中,我收到「this.data未定義」,「this.reader未定義」或「b未定義」和「h未定義」等錯誤。

同一種錯誤來當我改變數據格式,如JavaScript數組:

var dataexample = [[1, 'Sant Esteve de Palautordera'], [2, 'Parc Natural del Montseny']]; 

,並呼籲dataexample在商店的「數據」屬性。

我絕對輸了...

變量 my_variable

回答

7

數據以JSON格式,所以JsonReader應該被使用。要使用該閱讀器,您可以簡單地使用JsonStore。例如:

var data = '[{"cod_domini":"1","nom_domini":"Sant Esteve de Palautordera"},{"cod_domini":"2","nom_domini":"Parc Natural del Montseny"},{"cod_domini":"5","nom_domini":"Sant Pere de Vilamajor"},{"cod_domini":"6","nom_domini":"Santa Maria i Mosqueroles"}]'; 

var mystore = new Ext.data.JsonStore({ 
    //autoload: true, 
    fields: [ 
     {type: 'integer', name: 'cod_domini'}, 
     {type: 'string', name: 'nom_domini'} 
    ] 
}); 
mystore.loadData(Ext.decode(data)); // decode data, because it is in encoded in string 

var cbxSelDomini = new Ext.form.ComboBox({ 
    hiddenName: 'Domini', 
    name: 'nom_domini', 
    displayField: 'nom_domini', 
    valueField: 'cod_domini', 
    mode: 'local', 
    triggerAction: 'all', 
    listClass: 'comboalign', 
    typeAhead: true, 
    forceSelection: true, 
    selectOnFocus: true, 
    store: mystore 
}); 

工作樣本:http://jsfiddle.net/Ajnw7/

+0

您好,謝謝回答。按照你的例子,我已經接近了它。爲了填充組合框,我需要明確地告訴mystore.loadData(Ext.decode ...)在螢火蟲上,因爲當我加載應用程序時,它不是自動填充的。換句話說,程序會在加載應用程序時忽略mystore.loadData(Ext.decode ...)句子。我想這是因爲我在一個函數內部完成了所有這些過程。我對嗎?我該怎麼做才能解決這個問題? –

+0

我已經解決了。非常感謝你! –

+4

如果你已經解決了它,你可以把這個問題的答案放在我們這些人身上嗎?謝謝! –