0

我在带有表格名称的一侧有一个 grid.panel,我想在用户单击它时在选项卡视图内的另一个 grid.panel 中显示表格(或它的结构)。

我做了什么:

在动作监听器中

var store = Ext.data.StoreManager.lookup('Tables');
currentTable = store.findRecord('name',record.get('name'));

var structureView = Ext.ComponentQuery.query('structure')[0];
structureView.showTable(currentTable);

在视图中

showTable: function(table) {
    this.storeObj.getProxy().url = '/tables/stucture/' + table.data.name;
    this.storeObj.load();

    this.update();
}

在 Tables 存储中,我有表描述符,其中包含一些基本数据,例如名称等,并且带有表名的列表显示了该存储的内容。因此,我查找 Tables 存储并获取 tabledescriptor 并将其传递给视图,然后视图加载存储(在本例中为“列”)以及它将显示的数据。在我切换标签之前,这一切都很好。更改活动选项卡然后更改回数据不会在单击另一个表的名称时刷新,我得到这个:Uncaught TypeError: Cannot call method 'removeChild' of null。更改活动选项卡后似乎无法再加载商店。我在论坛上发现了这个问题,但我找不到解决方案。

你有什么想法?

谢谢你的时间。

编辑:

Ext.define('App.view.Table.Structure', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.structure',
    store: 'Columns',
    width: 800,
    storeObj: undefined,

    initComponent: function () {

        this.columns = [{
            header: 'Column name',
            dataIndex: 'name',
            flex: 1
        }, {
            header: 'Position',
            dataIndex: 'position',
            flex: 1
        }, {
            header: 'Default value',
            dataIndex: 'defaultValue',
            flex: 1
        }, {
            header: 'Column type',
            dataIndex: 'type',
            flex: 1
        }, ];

        this.storeObj = Ext.StoreManager.lookup('Columns');

        this.callParent(arguments);
    }
4

1 回答 1

0

好吧,我终于设法解决了,但我真的不明白为什么这解决了问题。所以这就是我所做的:

  • 每次我需要更新 Columns 存储(或其他)时,我都会查找它,而不是仅在 initcomponent 中查找它。
  • 我没有调用 update() 方法,而是调用了 reconfigure()

现在它就像魅力一样,但我不明白为什么 update 没有起到作用,为什么我每次想调用 load() 时都必须查找商店......所以如果有人能解释一下,我会很感激的。

于 2012-12-17T10:17:30.620 回答