这让我发疯。我有一个JS文件:
Ext.onReady(function(){
Ext.QuickTips.init();
var SitesStore = new Ext.data.JsonStore({
autoLoad: true,
fields: [{
name: 'id',
mapping: 'id'
}, {
name: 'name',
mapping: 'name'
}],
proxy: {
type: 'ajax',
url : '/sites/getsites.do'
},
storeId: 'SitesStore',
root: 'sites',
url: '/sites/getsites.do',
xtype: 'jsonstore'
});
SitesStore.load(function(data){
Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Choose Site...',
store: SitesStore,
data: data[0].raw["sites"],
queryMode: 'remote',
displayField: 'name',
valueField: 'id',
renderTo: "timesheetSearch"
});
console.log(data[0].raw["sites"]);
});
}); //end onReady
我的
/sites/getsites.do
以以下格式返回JSON
数据:{
-sites: [
-{
id: "12345678"
name: "Blah Warehouse"
},
-{
id: "5999B91DF6C0"
name: "WalMart Warehouse"
},
...
}
我意识到
data[0].raw["sites"]
可能不是访问数据的首选方式,但是我确实确认数据已填充,并且我将获得136 sites
。combobox
执行渲染。但是,实时搜索无效,并且没有条目。我是ExtJS的新手。
任何提示将不胜感激。
谢谢
更新
这段代码 WORKS
var SitesStore = Ext.create('Ext.data.Store', {
autoLoad: true,
fields: ['id','name'],
data: [{'id':'aaaa', 'name':'Honeywell'}],
storeId: 'SitesStore',
root: 'sites'
});
Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Choose Site...',
store: SitesStore,
queryMode: 'remote',
displayField: 'name',
triggerAction: 'all',
valueField: 'id',
renderTo: "timesheetSearch"
});
这是而不是
var SitesStore = Ext.create('Ext.data.Store', {
autoLoad: true,
fields: ['id','name'],
proxy: {
type: 'ajax',
url: '/sites/getsites.do'
},
storeId: 'SitesStore',
root: 'sites'
});
Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Choose Site...',
store: SitesStore,
queryMode: 'remote',
displayField: 'name',
triggerAction: 'all',
valueField: 'id',
renderTo: "timesheetSearch"
});
当我在没有
proxy
的情况下运行它(并指定url
)时,出现一条错误消息,提示我未指定代理。谢谢
更新
啊!!!!!!
我知道了。这是正确的
JSONStore
var SitesStore = Ext.create('Ext.data.Store', {
autoLoad: true,
fields: ['id','name'],
proxy: {
type: 'ajax',
url: '/sites/getsites.do',
reader: {
type:'json',
root: 'sites'
}
},
storeId: 'SitesStore',
root: 'sites'
});
谢谢大家。不敢相信这有多难。主要是因为我找不到一个好的教程。哈哈
最佳答案
更新
我能够弄清楚这一点。这是工作代码:
var SitesStore = Ext.create('Ext.data.Store', {
autoLoad: true,
fields: ['id','name'],
proxy: {
type: 'ajax',
url: '/sites/getsites.do',
reader: {
type:'json',
root: 'sites'
}
},
storeId: 'SitesStore',
root: 'sites'
});
Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Choose Site...',
store: SitesStore,
queryMode: 'remote',
displayField: 'name',
triggerAction: 'all',
valueField: 'id',
renderTo: "timesheetSearch"
});
我无法使JSONStore正常工作,所以我创建了一个标准的
Store
,并且不得不将reader
属性与我的JSON
数据进行匹配。希望这对某人有帮助。
关于json - 为什么我不能使用JSONStore在EXTjs 4中使用简单的Combobox?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6021913/