Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Ext js designer从XmlStore填充组合_Javascript_Extjs - Fatal编程技术网

Javascript 使用Ext js designer从XmlStore填充组合

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文件加载数据的简单(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>
最后,这是组合的代码:

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'
        }
    ]
});