2010-09-23 9 views
3

Je pense que j'ai un problème très populaire, mais pas trouvé de réponse pour cela maintenant. :) J'ai obtenu 2 comboboxes similaires - au début je définis ma valeur par id - comboT.setValue("22763"); et il a correctement défini une valeur de texte liée à cet ID. Lors de la seconde reload store (jsonstore), puis définir la valeur - comboC.setValue("3"); Mais ce combo ne définit que l'ID et non la valeur du texte (si j'ouvre la liste je peux voir quelle combo marque correctement la valeur du texte. sélectionnez) valeur texte affiché correctement au combo. Comment résoudre ce problème? Merci.ExtJS: Combobox après magasin de rechargement ne définissez pas de valeur

Répondre

11

Quelque chose comme cela, la syntaxe peut être légèrement depuis que je fais de la mémoire:

var val = 3; 
var store = comboC.getStore(); 
store.on("load", function() { 
    comboC.setValue(val); 
}): 
store.load(); 
+0

wow. Ça marche! ammoQ dis-moi pourquoi. Merci beaucoup les gars! –

+0

Excellente idée, merci beaucoup – Ramanavel

6

Chargement du magasin est asynchrone, vous pouvez déplacer le réglage de la nouvelle valeur dans le gestionnaire d'événements callback: de store.load({...}), parce que sinon, vous Définir la valeur avant que le magasin ne soit chargé

EDIT: pour être complet, un exemple, donc vous avez une version alternative (dans certains ca SES, il est peut-être undesireable pour lier le rappel au magasin lui-même, comme ormuriauga a):

var val = 3; 
var store = comboC.getStore(); 
store.load({ 
    callback: function() { 
     comboC.setValue(val); 
    } 
}); 
+0

grand merci à vous. Je comprends maintenant :) –

2

Un autre exemple sur la façon de définir la valeur de la zone de liste déroulante en recherchant une chaîne dans le magasin de données sous-jacent. J'ai pu coder cela en utilisant les échantillons dans ces réponses en tant que référence:

//The store's data definition must have at least a data.id field defined  
set_combobox_value_from_store = function (combobox, valueField, value) { 
//Get a reference to the combobox's underlying store 
var store = combobox.getStore(); 
store.load({ 
    callback: function() { 
     //Find item index in store 
     var index = store.find(valueField, value, false); 
     if (index < 0) return; 
     //Get model data id 
     var dataId = store.getAt(index).data.Id; 
     //Set combobox value and fire OnSelect event 
     combobox.setValueAndFireSelect(dataId); 
    } 
}); 
1

Dans ExtJS 4.1 ressemble combo.setValue() fonctionne lorsque le type de ValueField dans le modèle est « string ». c'était mon code

Ext.define('Model.CboObras', { 
       extend: 'Ext.data.Model', 
       idProperty: 'co_obra', 
       fields: [{ 
        name: 'co_obra', 
        type: 'int' 
       }, { 
        name: 'nb_obra', 
        type: 'string' 
       }] 
      }); 

cela ne fonctionne pas.

Quand j'ai changé mon code à ceci:

Ext.define('Model.CboObras', { 
     extend: 'Ext.data.Model', 
     idProperty: 'co_obra', 
     fields: [{ 
     name: 'co_obra', 
      type: 'string' 
      }, { 
      name: 'nb_obra', 
      type: 'string' 
     }] 
    }); 

Après que j'utilise ceci:

var store = comboC.getStore(); 
    store.load({ 
    callback: function() { 
     comboC.setValue(val); 
    } 
}); 

cela fonctionne maintenant comme un charme!