我正在尝试使用来自Xml文件的数据进行简单(noob)的Combo检查。 这是我的xml:
<?xml version="1.0" encoding="UTF-8"?>
<accounts>
<account>
<name>Savings Account</name>
<id>1</id>
</account>
<account>
<name>Current Account</name>
<id>2</id>
</account>
</accounts>
当我配置并添加XmlStore时,它会报告找到2条记录。
以下是XmlStore的代码:
cteo = Ext.extend(Ext.data.XmlStore, {
constructor: function(cfg) {
cfg = cfg || {};
cteo.superclass.constructor.call(this, Ext.apply({
storeId: 'cteo',
url: 'cteo.xml',
record: 'account',
data: '',
fields: [
{
name: 'name',
mapping: 'name'
},
{
name: 'id',
mapping: 'name'
}
]
}, cfg));
}
});
new cteo();
最后,这是组合的代码:
MyPanelUi = Ext.extend(Ext.Panel, {
title: 'My Panel',
width: 400,
height: 250,
initComponent: function() {
this.items = [
{
xtype: 'label',
text: 'Cuenta Origen'
},
{
xtype: 'combo',
store: 'cteo',
displayField: 'name',
valueField: 'id'
}
];
MyPanelUi.superclass.initComponent.call(this);
}
});
它必须是简单的东西,但我被卡住了......
答案 0 :(得分:1)
这不会做任何事情:
store: 'cteo',
您需要传入先前分配的对象引用,而不是字符串:
store: cteo,
或者,您可以调用Ext.StoreMgr.lookup('cteo')
,但根据您的代码判断我认为变量引用是您的意图。
对您的代码发表评论。这样做:
cteo = Ext.extend(Ext.data.XmlStore, {
...
cteo();
...有点奇怪,很可能在窗口范围内创建一个全局变量(假设cteo之前没有定义为var)。可以将其视为定义自定义类,然后创建您定义的类的新实例。另外,考虑一下您的命名 - 商店子类应该是特定类型的商店,这应该在名称中明显。通常,您的代码看起来应该更像这样:
Ext.ns('MyNamespace');
MyNamespace.CteoStore = Ext.extend(Ext.data.XmlStore, {
...
});
var cteoStore = new CteoStore();
噢,是的,还有一件事。您不需要覆盖构造函数,仅用于提供默认配置。就这样做:
MyNamespace.CteoStore = Ext.extend(Ext.data.XmlStore, {
storeId: 'cteo',
url: 'cteo.xml',
record: 'account',
data: '',
fields: [
{
name: 'name',
mapping: 'name'
},
{
name: 'id',
mapping: 'name'
}
]
});
这也更有用,因为这些配置是可重写的,与您的示例不同。这使它更具可重用性(例如,如果您想为另一个实例分配不同的ID)。
答案 1 :(得分:0)