I am trying to get the number of items in the combo box so that I can make the first value by default visible in the combo box using the getCount() method but I see it always return 0 so cannot get the first item to be displayed in the combo box.
Code for my combo box is as shown below:
JavaScript
x
46
46
1
Ext.define('something....', {
2
controller: 'some Controller',
3
4
initComponent: function() {
5
var me,
6
me = this;
7
8
me.items = [{
9
xtype: 'form',
10
items: [{
11
xtype: 'combo',
12
itemId: 'nameId',
13
name:'nameId',
14
labelAlign: 'top',
15
fieldLabel: 'Name',
16
store: me._getNames(),
17
//disabled:some condition?true:false,//doesn't gray out combo
18
valueField:'dataId',
19
displayField: 'firstName',
20
editable: false,
21
listeners:{
22
afterrender: function(combo,component) {
23
var combo = me.down('#nameId');
24
var nameStore = combo.getStore();
25
var setFirstRecord = function(combo){
26
var nameStore = combo.getStore();
27
if(nameStore.getCount() === 1){
28
combo.setValue(nameStore.getAt(0));
29
}
30
}
31
32
if(nameStore.isLoaded() === false){
33
nameStore.on('load', function(nameStore){
34
setFirstRecord(combo);
35
},this,{
36
single:true
37
});
38
}else{
39
setFirstRecord(nameStore);
40
}
41
},
42
}
43
}]
44
}];
45
}
46
Code for the store is as below:
JavaScript
1
28
28
1
_getNames: function (){
2
var nameStore = Ext.create('Ext.data.Store', {
3
autoLoad: true,
4
proxy: {
5
type: 'ajax',
6
url: 'name.json',
7
reader: {
8
type: 'json',
9
rootProperty:'items',
10
transform: function (data) {
11
var data = {
12
items: [{
13
dataId: data[0].dataId,
14
firstName: data[0].name.firstName,
15
nameDetails: data[0].nameDetails
16
}]
17
}
18
return data;
19
}
20
},
21
},
22
fields: ['dataId', 'firstName','nameDetails']
23
});
24
25
return namesStore;
26
}
27
})
28
The result returned from the api to populate the store is as follows:
JavaScript
1
20
20
1
[
2
{
3
"dataId":1,
4
"name":{
5
"dataId":1,
6
"firstName":"Julie",
7
"code":"10",
8
"connectionList":[
9
"EMAIL"
10
]
11
},
12
"nameDetails":{
13
"EMAIL":{
14
"dataId":1,
15
"detail":"EMAIL"
16
}
17
}
18
}
19
]
20
Any suggestions on what’s missing would be great!
Advertisement
Answer
I am written that example for you in Sencha Fiddle: https://fiddle.sencha.com/#view/editor&fiddle/3cdl
That solve your problem:
JavaScript
1
8
1
combo.getStore().on("load",
2
function (store, records, successful, operation, eOpts) {
3
if (store.getData().length > 0)
4
combo.setValue(store.getData().get(0).getData().id)
5
},
6
this
7
)
8