La zone de liste déroulante extjs getCount() sur le magasin renvoie 0


Cendre

J'essaie d'obtenir le nombre d'éléments dans la zone de liste déroulante afin que je puisse rendre la première valeur par défaut visible dans la zone de liste déroulante à l'aide de la méthode getCount() mais je vois qu'elle renvoie toujours 0, donc je ne peux pas afficher le premier élément dans la zone de liste déroulante.

Le code de ma zone de liste déroulante est comme indiqué ci-dessous :

Ext.define('something....', {
    controller: 'some Controller',

    initComponent: function() {
        var me,
        me = this;

        me.items = [{
            xtype: 'form',
            items: [{
                xtype: 'combo',
                itemId: 'nameId',
                name:'nameId',
                labelAlign: 'top',
                fieldLabel: 'Name',
                store: me._getNames(),
                //disabled:some condition?true:false,//doesn't gray out combo 
                valueField:'dataId',
                displayField: 'firstName',
                editable: false,
                listeners:{
                   afterrender: function(combo,component) {
                    var combo = me.down('#nameId'); 
                    var nameStore = combo.getStore(); 
                    var setFirstRecord = function(combo){
                        var nameStore = combo.getStore(); 
                        if(nameStore.getCount() === 1){
                            combo.setValue(nameStore.getAt(0)); 
                        }
                    }

                    if(nameStore.isLoaded() === false){
                        nameStore.on('load', function(nameStore){
                            setFirstRecord(combo);
                        },this,{
                            single:true
                        });
                    }else{
                        setFirstRecord(nameStore); 
                    }
                   },
               }
            }]
        }];
    }

Le code du magasin est le suivant :

    _getNames: function (){
        var nameStore = Ext.create('Ext.data.Store', {
            autoLoad: true,
            proxy: {
                type: 'ajax',
                url: 'name.json',
                reader: {
                    type: 'json',
                    rootProperty:'items',
                    transform: function (data) {
                        var data = {
                           items: [{
                              dataId: data[0].dataId,
                              firstName: data[0].name.firstName,
                              nameDetails: data[0].nameDetails
                           }]
                        }
                        return data;
                    }
                },
            }, 
            fields: ['dataId', 'firstName','nameDetails']
        });

        return namesStore;
    }
})

Le résultat renvoyé par l'API pour remplir le magasin est le suivant :

[
   {
      "dataId":1,
      "name":{
         "dataId":1,
         "firstName":"Julie",
         "code":"10",
         "connectionList":[
            "EMAIL"
         ]
      },
      "nameDetails":{
         "EMAIL":{
            "dataId":1,
            "detail":"EMAIL"
         }
      }
   }
]

Toute suggestion sur ce qui manque serait géniale!

César Zea Gomez

J'ai écrit cet exemple pour vous dans Sencha Fiddle : https://fiddle.sencha.com/#view/editor&fiddle/3cdl

Cela résout ton problème :

combo.getStore().on("load",
    function (store, records, successful, operation, eOpts) {
        if (store.getData().length > 0)
            combo.setValue(store.getData().get(0).getData().id)
    },
    this
)

Articles connexes


Filtrage de la zone de liste déroulante sur PowerApps

Roberto Munguia J'ai un DataTable sur PowerApps, ce DataTable a une colonne d'état, délimitée par une virgule (,). Comme: AL, AK, AZ, AR, CA, CO, CT, DE, FL, GA, HI CETTE CO J'utilise un ComboBox pour sélectionner de nombreuses options de filtrage, comme [ CA,