0
votes

I'm working on a Extjs 4 application and I'm at a point where I need to create view components dynamically.

I have a store that's loaded with new items when I select a value from a combobox. And I want to create a new view component for each item the new store has.

I'm using Extjs 4 with the MVC architecture.

This is the function that creates a new combobox that's fired when I choose an Item from another combo :

function createComboBox(label) {
var combo = new Ext.form.ComboBox({
    displayField: 'combo',
    typeAhead: true,
    mode: 'local',
    forceSelection: true,
    triggerAction: 'all',
    emptyText: 'Select item...',
    selectOnFocus: true,
    fieldLabel: label
});
return combo;
}   

This is the code inside my "select combobox" handler event :

 onSelectedValue: function (combo) {
 var selected = combo.getValue();
 var guiDataStore = this.getGuiDataStore();
 guiDataStore.getProxy().url = 'gui_comp_items.php?id_metric=' + selected;
 guiDataStore.load({
     params: {
         id_metric: selected
     },
     scope: this,
     callback: function () {
         var paramsRef = this.getParams();//this is the view where I'd like to create the combobox
         var total = guiDataStore.getTotalCount();
         if (total > 0) {
             guiDataStore.each(function (model) {
                 if (model.get('type_guicomp') == 'combobox') {
                     paramsRef.down('fieldset[id=filterfieldset]').add(createComboBox(model.get('name_filter')));
                     paramsRef.down('fieldset[id=filterfieldset]').doLayout();
                 }
             })

         }
     }
 })

}

So my problem is, the first time I choose an item from the existing combobox and total = 0 , no combobox is created and everything is fine, then when I choose a value that returns total = 2, 2 new comboboxes are created, that's perfect. BUT, when right after that, I choose again a value with total = 0, the store is not updated and I STILL get 2 new comboboxes.

Is there a problem with my callback? Please any help would be much appreciated.

1
Once guiDataStore has 2 records in it, why would it be empty next time? As in, do you empty the store between the various callback calls? - Izhaki
Thank you! Adding guiDataStore.loadData([],false); after the callback worked. - salamey

1 Answers

0
votes

Once guiDataStore has 2 records in it, why would it be empty next time?

As in, do you empty the store between the various callback calls?