这是我的模特:
data: i
0: i
data: Object
events: Object
hasListeners: k
id: "region-ext-record-344"
index: 0
internalId: "ext-record-344"
modified: Object
phantom: false
raw: Array[2] // i want to get those two elements one displayField, another valueField
0: "01"
1: "Region 1"
length: 2
__proto__: Array[0]
store: i
stores: Array[1]
__proto__: Object
1: i
2: i
3: i
length: 4
__proto__: Array[0]
如果你愿意,我可以发布代码!
我试着像以下那样读商店:
store: regionStore
,但它显示的是一个空框,其中4个空行等于我商店中的项目数,然后我尝试像store: regionStore.data.items
那样,现在它显示[object object]
行,I完全明白为什么,但无法找到解决方案。我是所有ExtJs的新手,但我使用的是ExtJs 4。
我的模型看起来像这样:
Ext.regModel('region', {
fields: [
{name: 'id', type: 'integer'},
{name: 'name', type: 'String'}
});
我的商店看起来像那样:
var regionStore = new Ext.data.ArrayStore({
id: 'regionStore',
model: 'region',
data: MyDesktop.GridWindow.getRegionData() //that is data from ajax response
});
我的组合框:
{
xtype: 'combobox',
value: "region",
store: regionStore,
width: 135,
id: 'regionCombo'
editable: false
}
答案 0 :(得分:2)
您已将问题标记为extjs 4.2,但您的代码是旧样式,并未遵循建议。我真的建议你阅读手册,特别是MVC的介绍。
自4.0.0版起,不推荐使用Ext.regModel。按如下所示更改代码并将其保存到文件app / model / Region.js:
Ext.define('MyApp.model.Region', {
extends: 'Ext.data.Model',
fields: [
{name: 'id', type: 'integer'},
{name: 'name', type: 'string'}
]
});
在文件app / store / Regions.js中:
Ext.define('MyApp.store.Regions', {
extends: 'Ext.data.ArrayStore',
//id: notice that id is no longer necessary
model: 'Region',
//data: you load the store from the server, so the data is loaded automatically
autoLoad: true
})
你的组合框成了:
xtype: 'combobox',
value: 'region',
store: 'Regions',
width: 135,
id: 'regionCombo',
editable: false,
valueField: 'id',
displayField: 'name'
我从未在4.2之前使用过extjs,但似乎版本4中引入的更改很重要。采用新范式可能很困难。但我确信它从根本上简化了您的代码。你肯定不会后悔这一步 随着5.0版本的发布,我认为现在是时候养成新习惯并将ExtJs 2.0编码风格抛在身后了。
答案 1 :(得分:0)
您已正确启动,但未指定要使用的字段。添加缺少的配置:
store: regionStore,
valueField: 'id',
displayField: 'name'
对于组合框,您可以将商店内联定义为:
store: [[1, 'first option'], [2, 'second option']],
在这种情况下,您不需要声明值和显示字段。它们是隐含的。