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 ストアを検索して tabledescriptor を取得し、それをビューに渡します。ビューは、表示するデータをストア (この場合は「Columns」) にロードします。そして、タブを切り替えるまで、これはすべて正常に機能します。アクティブなタブを変更した後、別のテーブルの名前をクリックしてもデータが更新されず、次のようになります: 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

やっと解決できましたが、なぜこれが問題を解決したのかよくわかりません。だからこれは私がやったことです:

  • 列ストア (またはその他) を更新する必要があるたびに、initcomponent で検索するだけでなく、検索しました。
  • update() メソッドを呼び出す代わりに、reconfigure() を呼び出しました

今では魅力のように機能しますが、更新がうまくいかなかった理由と、 load() を呼び出すたびにストアを検索しなければならなかった理由がわかりません...誰かがそれを説明できれば私は感謝します。

于 2012-12-17T10:17:30.620 に答える