J'utilise EXTJS avec un éditeurgridpanel et j'essaie d'insérer une liste déroulante, remplie avec JsonStore. Voici un aperçu de mon code: LE MAGASIN:EXTJS 3.2.1 EditorGridPanel - ComboBox avec jsonstore
kmxgz.ordercmpappro.prototype.getCmpapproStore = function(my_url) {
var myStore = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url: my_url
, method: 'POST'
})
, reader: new Ext.data.JsonReader({
root: 'rows',
totalProperty: 'total',
id: 'list_cmpappro_id',
fields: [
{name: 'list_cmpappro_id', mapping: 'list_cmpappro_id'}
, {name: 'list_cmpappro_name', mapping: 'list_cmpappro_name'}
]
})
, autoLoad: true
, id: 'cmpapproStore'
, listeners: {
load: function(store, records, options){
//store is loaded, now you can work with it's records, etc.
console.info('store load, arguments:', arguments);
console.info('Store count = ', store.getCount());
}
}
});
return myStore;
};
le COMBO:
kmxgz.ordercmpappro.prototype.getCmpapproCombo = function(my_store) {
var myCombo = new Ext.form.ComboBox({
typeAhead: true,
lazyRender:false,
forceSelection: true,
allowBlank: true,
editable: true,
selectOnFocus: true,
id: 'cmpapproCombo',
triggerAction: 'all',
fieldLabel: 'CMP Appro',
valueField: 'list_cmpappro_id',
displayField: 'list_cmpappro_name',
hiddenName: 'cmpappro_id',
valueNotFoundText: 'Value not found.',
mode: 'local',
store: my_store,
emptyText: 'Select a CMP Appro',
loadingText: 'Veuillez patienter ...',
listeners: {
// 'change' will be fired when the value has changed and the user exits the ComboBox via tab, click, etc.
// The 'newValue' and 'oldValue' params will be from the field specified in the 'valueField' config above.
change: function(combo, newValue, oldValue){
console.log("Old Value: " + oldValue);
console.log("New Value: " + newValue);
},
// 'select' will be fired as soon as an item in the ComboBox is selected with mouse, keyboard.
select: function(combo, record, index){
console.log(record.data.name);
console.log(index);
}
}
});
return myCombo;
};
Le combobox est inséré dans un editorgridpanel. Il y a un renderer comme ceci:
Ext.util.Format.comboRenderer = function(combo){
return function(value, metadata, record){
alert(combo.store.getCount()); //<== always 0!!
var record = combo.findRecord(combo.valueField || combo.displayField, value);
return record ? record.get(combo.displayField) : combo.valueNotFoundText;
}
};
Lorsque la grille est affichée la première fois, au lieu d'avoir le displayField, je: « Value not found. » Et j'ai l'alerte: 0 (alert (combo.store.getCount())) à partir du moteur de rendu. Mais je peux voir dans la console que les données ont été correctement chargées! Même si j'essaie de recharger le magasin depuis le moteur de rendu (combo.store.load();), j'ai toujours l'alerte (0)! Mais quand je sélectionne le combo pour changer la valeur, je peux voir les données et quand je change la valeur, je peux voir le displayFiel! Je ne comprends pas quel est le problème? Depuis maintenant plusieurs jours, j'ai déjà essayé toutes les solutions que j'ai trouvées ... mais toujours rien! Tout conseil est le bienvenu!
Yoong
Je vais avoir le même problème. Toutes les solutions que vous avez trouvées? – dmackerman