Javascript 使用Ext js designer从XmlStore填充组合
我正在尝试使用从Xml文件加载数据的简单(noob)Combo示例。 以下是我的xml:Javascript 使用Ext js designer从XmlStore填充组合,javascript,extjs,Javascript,Extjs,我正在尝试使用从Xml文件加载数据的简单(noob)Combo示例。 以下是我的xml: <?xml version="1.0" encoding="UTF-8"?> <accounts> <account> <name>Savings Account</name> <id>1</id> </account> <account> <name>Curren
<?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>
最后,这是组合的代码:
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);
}
});
这一定很简单,但我被卡住了…这没什么用:
store: 'cteo',
您需要传入之前指定的对象引用,而不是字符串:
store: cteo,
或者,您可以调用Ext.StoreMgr.lookup('cteo')
,但根据您的代码判断,我假设变量引用是您的意图
对代码的一个注释。这样做:
cteo = Ext.extend(Ext.data.XmlStore, {
...
cteo();
…有点奇怪,很可能是在窗口范围中创建了一个全局变量(假设cteo没有在前面的某个地方定义为var)。可以将其视为定义自定义类,然后创建所定义类的新实例。另外,考虑一下您的命名——store子类应该是特定类型的store,这在名称中应该很明显。通常,您的代码应该更像这样:
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一样)。在sencha站点查看此线程:
很好,但如果你介意的话,我的评论仍然有效。
MyNamespace.CteoStore = Ext.extend(Ext.data.XmlStore, {
storeId: 'cteo',
url: 'cteo.xml',
record: 'account',
data: '',
fields: [
{
name: 'name',
mapping: 'name'
},
{
name: 'id',
mapping: 'name'
}
]
});