Hi I'm having trouble making a comboBox, I'd really appreciate if you help me, here's the code for my store:
Ext.define('Benef', {
extend: 'Ext.data.Model',
fields: ['id', 'name']
});
var bene = new Ext.data.Store({
model: 'Benef',
reader: new Ext.data.JsonReader({
fields: ['id', 'name'],
root: 'benef'
}),
proxy: new Ext.data.HttpProxy({
url: '../data/benef.php'
})
});
When benef.php is called, it sends names of people this way:
{
"benef":[
{"id":"1","name":"Person"},
{"id":"2","name":"aPerson"},
{"id":"3","name":"Per 2"},
{"id":"4","name":"BeneP"},
{"id":"5","name":"BeneA"}
]
}
And my comboBox code is:
dataIndex: 'benefOne',
width: 150,
header: 'Benef',
editor: {
xtype: 'combobox',
typeAhead: true,
selectOnTab: true,
allowBlank: false,
autoSelect: true,
editable: false,
store: bene,
mode: 'local',
triggerAction: 'all',
displayField: 'name',
valueField: 'name',
lazyRender: true,
listClass: 'x-combo-list-small'
}
Everything seems to work fine when I run the script, firebug gets the answer from benef.php but when I click the combobox to display the values, it only shows a tiny blank field :s any ideas? Thanks in advance!
Add this property to you combobox:
displayField: 'name',
valueField: 'id'
I had the same problem, because I used complex field names in my model and these are not working with combobox.
I.e. I had to change
fields:[
{name:'employeeId.char10'},
{name:'fullname.char50'}
],
to
fields:[
{name:'employeeId', mapping:'employeeId.char10'},
{name:'fullname', mapping:'fullname.char50'}
],
and
displayField:'fullname.char50',
valueField:'employeeId.char10',
to
displayField:'fullname',
valueField:'employeeId',
Everything looks correct except one thing: try to put reader config into proxy config.
//...
proxy: new Ext.data.HttpProxy({
url: '../data/benef.php',
reader: new Ext.data.JsonReader({
fields: ['id', 'name'],
root: 'benef'
})
}),
//...
try to change mode to queryMode
I think the code was not clear to some people so I am updating the code to provide a detailed understanding:
var httpProxy = new Ext.data.HttpProxy({
url: '../data/benef.php'
});
var jsonReader = new Ext.data.JsonReader({
fields: ['id', 'name'],
root: 'benef'
});
var newStore = new Ext.data.SimpleStore({
proxy: httpProxy,
reader: jsonReader
});
var combobox = new Ext.form.ComboBox({
store: newStore,
//..........
});
This is how I am using in my code and its working fine.
Related
I need to populate combobox with JSON data. This is my store:
Ext.define('Test.store.GetShopSurvey', {
extend: 'Ext.data.Store',
alias: 'store.GetShopSurvey',
model: 'Test.model.GetShopSurvey',
storeId: 'GetShopSurvey',
proxy: {
type: 'ajax',
url: 'http://localhost/webcontent/CShopSurveyWebApplet&SubFunc=GetShopSurvey',
reader: {
type: 'json',
}
}
});
And my view:
Ext.define('Test.view.main.Announcement',
{
extend: 'Ext.panel.Panel',
requires: [
'Test.view.main.AnnouncementController',
'Test.view.main.AnnouncementModel',
'Test.store.Personnel'
],
store: {
type: 'GetShopSurvey'
},
And one of the items is:
{
xtype: 'combo',
fieldLabel: 'Range',
name: 'Range1',
store: , //here I need store to load. For example json value is {"range": 70}
displayField: 'range',
autoSelect: true,
forceSelection: true,
disabled: true
},
I added fields to model with name and type of data. However, I don't know how to get data from JSON and parse it in combobox. I commented place where I need to put that value btw.
Have you tried :
{
xtype: 'combo',
fieldLabel: 'Range',
name: 'Range1',
store: 'GetShopSurvey',
queryMode: 'local',
displayField: 'range',
valueField: 'range',
autoSelect: true,
forceSelection: true,
disabled: true
}
If this doesn't work can you give me more information like toolkit and extjs version please
You should create an store instance and then use it.Moreover, set its autoLoad config to true value.
try loadRawData method
var jsonData = {'range':500};
combo.getStore().loadRawData(jsonData);
I am using Extjs 4.1, tried to load data for Combobox, but doesn't work. I have strong doubt about hte json reader root / record.
the data model and store are defined ,
Ext.define('tagModel', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'string'},
{name: 'name', type: 'string'}
]
});
var tagStore = new Ext.data.Store({
model: 'tagModel',
proxy: {
type: 'ajax',
url: '/ExtjsWebApp/webresources/question/loadTags',
reader: {
type: 'json',
record : 'rtnList'
}
},
listeners: {
load: function(store, records, options){
alert("success " +records.length);
}
},
autoLoad: true
});
the ComboBox is defined as this,
{
itemId: 'search_tag_fld',
fieldLabel: 'Tag',
xtype: 'combobox',
displayField: 'name',
valueField: 'id',
store: tagStore,
queryMode: 'remote',
multiSelect: true,
anchor: '100%',
labelHeight: 300
}
I am sure that the restful webservice will return data as this
{"rtnList":[{"id":1,"name":"Java","active":"true"},{"id":2,"name":"J2EE","active":"true"},{"id":3,"name":"JMS","active":"true"},{"id":4,"name":"Design","active":"true"},{"id":5,"name":"SOA","active":"true"}],"successMsg":"success","errorMsg":"","time":"09/21/2013 18:34:55","sessionId":null,"userId":null}
In your reader, change "record" to "root". Here's a fiddle that shows that your current setup will work just fine: https://fiddle.sencha.com/#fiddle/km
I have a normal Combobox in my view, and I want to load the store, but then I get an error in my Firebug:
TypeError: reader.read is not a function
result = reader.read(me.extractResponseData(response));
The part in my view:
{
xtype: 'combobox',
id:'newsletter_template',
fields: ['groupValue','groupText'],
name:'template',
editable:false,
valueField: 'groupValue',
displayField: 'groupText',
allowBlank: false,
fieldLabel: 'Template',
anchor: '100%',
emptyText: 'Choose Template',
store: Ext.create('Ext.data.ArrayStore', {
model: 'news',
controller: 'news',
proxy: {
type: 'ajax',
url: 'bin/news/ajax.php',
reader: {
type: 'json',
root: 'results'
},
extraParams:{
action:'getNewsTemplates'
}
},
callback: function(records, operation, success) {
// do something after the load finishes
},
autoLoad: false
})
}
Has anyone an idea? THANKS A LOT!!!
Try changing store: Ext.create('Ext.data.ArrayStore', {
to store: Ext.create('Ext.data.Store', {
The problem is that you are using an ArrayStore which is basically a regular store with an array reader already defined, then you are defining a json reader in it which doesn't make any sense.
Given the following javascript:
var fo = Ext.create('Ext.form.Panel', {
layout:'box',
...
items: [{
xtype: 'combobox',
valueField: 'id',
displayField: 'organizationtype',
store: {
storeId: 'zaza',
fields: [{name: 'id'}, {name: 'organizationtype'}],
root: 'data',
autoLoad: true,
proxy: {
type: 'ajax',
url: '/apps/crm_organizations/orgtype/',
reader: {
type: 'json'
}
}
},
fieldLabel: 'Type relation',
name: 'organizationtype',
queryMode: 'local',
},
...
This panel contains - among other fields - also this combobox. I can see with wireshark that the url '/apps/crm_organizations/orgtype/' is actually queried. However the combobox doesn't show any values. Has this anything to do with the fact that I'm lazy loading the combobox?
This is the response on the JSON request:
{data: [ {id:"1" ,organizationtype:"Customer"}
,{id:"2" ,organizationtype:"Relation"}
,{id:"3" ,organizationtype:"Supplier"}
,{id:"4" ,organizationtype:"Unknown"} ]}
You have to set the root to the json reader you are using, Default is "", your's should be :
reader: {
type: 'json',
root: 'data'
}
Also you might consider replacing the fields configuration with a model object.(from docs)fields: In general this configuration option should be avoided, it exists for the purposes of backwards compatibility
Change combobox mode from local to remote mode: 'remote' and use json store:
store: {
xtype: 'jsonstore',
url: '/apps/crm_organizations/orgtype/',
autoLoad: true,
idProperty: 'id',
root: 'data',
fields: ['id','organizationtype'],
},
mode: 'remote'
In your store ,you missing the root property
store: {
storeId: 'zaza',
fields: [{name: 'id'}, {name: 'organizationtype'}],
root: 'data',
autoLoad: true,
proxy: {
type: 'ajax',
url: '/apps/crm_organizations/orgtype/',
reader: {
type: 'json',
root:'data'
}
}
}
and if your combo is query information across domains,then use jsonp configuration and use remote query for better performance
When I am trying to fetch data from the Store in the Combo Box,I am getiing output as--- [object Object]!!! but the value of the object is not coming!! Can any body tell me what is the problem or what should be the solution for this???
In Extjs 4.0:
Create data model
Ext.define('Bond', {
extend: 'Ext.data.Model',
idProperty: 'userid',
fields: [
{
name :'industryGroupsreName',
type:'string'
},
]
});
Create store
var industry=new Ext.data.Store(
{
model:'Bond',
proxy:
{
type: 'ajax',
url: 'industry.html',
reader: {
type: 'json'
}
}
});
industry.load();
Apply bellow code to your combo box
new Ext.create('Ext.form.ComboBox',
{
fieldLabel: 'Industry Group Name',
store: industry,
id: "industrygroup",
name: "industrygroup",
allowBlank: false,
hiddenName : 'industrygroup',
width:300,
queryMode: 'local',
displayField: 'industryGroupsreName',
valueField: 'industryGroupsreName'
}),