我想从商店为Extjs 4读取数据,但它显示[对象对象]

时间:2014-07-31 08:09:43

标签: javascript combobox store extjs4.2

这是我的模特:

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 }

2 个答案:

答案 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']],

在这种情况下,您不需要声明值和显示字段。它们是隐含的。