使用Ext js designer从XmlStore填充组合

时间:2010-07-30 14:29:44

标签: 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>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);
    }
});

它必须是简单的东西,但我被卡住了......

2 个答案:

答案 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)