2012-12-24 6 views
6

Ich verwende ExtJS 3.4 und ich brauche eine Combobox mit den folgenden Daten zu füllen:Populate ExtJS 3.4 Combobox mit lokalen JSON-Daten

"[{"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"}]" 

, die eine vorherige XMLHttpRequest kommt bilden, und ich habe es gespeichert so in einer variablen:

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"}]" 

also, habe ich folgende ExtJS 3.4 Combobox:

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 
}); 

Diese Combo Box ist suposed Daten von einem Ext.data.Store zu bekommen I „mystore“ genannt:

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'} 
                ] 
            }), 

Mein erstes Problem ist, dass in der ersten Instanz, die Daten nicht zu Datenbank geladen, auch zu sagen ausdrücklich: mystore.loadData (meine_variable);

Kann jemand versuchen, mir zu sagen, was ich falsch mache? In FireBug bekomme ich Fehler wie "this.data ist nicht definiert", "this.reader ist nicht definiert" oder "b ist undefiniert" und "h ist undefiniert".

Die gleiche Art von Fehlern kommen, wenn ich Datenformat wie JavaScript-Array wie ändern:

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

und rufe dataexample auf Speicher "data" Eigenschaft.

Ich bin absolut verloren ...

Antwort

7

Daten in Variable my_variable im JSON-Format, so JsonReader verwendet werden sollen. Um diesen Leser zu verwenden, können Sie einfach JsonStore verwenden. Beispiel:

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 
}); 

Arbeits Beispiel: http://jsfiddle.net/Ajnw7/

+0

Hallo und vielen Dank für die Beantwortung. Nach deinem Beispiel funktioniert es fast. Um die Combobox zu füllen, muss ich mystore.loadData (Ext.decode ...) explizit auf firebug setzen, da es beim Laden der App nicht automatisch gefüllt wird. Mit anderen Worten, das Programm ignoriert den mystore.loadData (Ext.decode ...) Satz, wenn die App geladen wird. Ich denke, das liegt daran, dass ich diese Prozedur in einer Funktion habe. Habe ich recht? Was soll ich tun, um dieses Problem zu lösen? –

+0

Ich habe es schon gelöst. Vielen Dank! –

+4

Wenn Sie es gelöst haben, können Sie bitte die Antwort für diejenigen von uns mit dem gleichen Problem stellen? Vielen Dank! –