3

ExtJsには次のコントローラーがあります。

Ext.define('FileBrowser.controller.BrowserController', {
    extend: 'Ext.app.Controller',
    views: ['browser.tree_dir', 'browser.grid_file'],
    stores: ['store_dir', 'store_file'],

    init: function () {
        this.control({
            'window > tree_dir': {
                itemclick: {
                    fn: function (view, record, item, index, event) {
                        if (record.isLeaf() == false) {
                            Ext.getStore('store_file').load({
                                params: {
                                    dir: record.data.id
                                }
                            });
                            var parentOfCurrentFiles = record.data.id
                            nodeId = record.data.id;
                            htmlId = item.id;
                            var grid_view = this.getView('browser.grid_file');
                            var grid_view_v = grid_view.getView();
                            grid_view_v.refresh();
                        }

                    }

                }
            }
        });
    },
    onPanelRendered: function () {
        console.log('The panel was rendered');
    }
});

「itemclick」の下でビューの1つを更新しようとしていることに気付いた場合、私のアプローチは機能していません。ビューを更新する方法を誰かに説明してもらえますか?ありがとうございました。

4

2 に答える 2

2

実際のインスタンスを取得するには (既に説明したようにvar grid_view= this.getView('browser.grid_file');)に置き換えます。または、そのグリッドを既に作成していて、インスタンスが 1 つしか存在しない場合は、コンポーネント クエリと共に xtype を使用してそれを受け取ります。var grid_view= this.getView('browser.grid_file').create();getView() only return the view config, not a instance!var grid_view=Ext.ComponentQuery('grid_file')[0]

次に、refresh() に進みます

基本的に、グリッドがストアにバインドされ、このストアで行われた変更がグリッドに直接反映されるため、このメソッドを呼び出す必要はありません。

また、クエリを使用する代わりに、作成時にビュー インスタンスを保存するか、refプロパティを直接使用して、ExtJS に作業を任せることをお勧めします。最後の 1 つは、私が推測する最良の解決策です... API の例内の ref を見て、試してみてください。

于 2012-12-13T07:16:52.587 に答える
0

あなたがやろうとしているのは、ストアをロードして、grid_view を更新したらデータを反映させることです...? その場合、setStore()グリッドに対して を行っていないか、他の場所でそれを行っている場合はsetData()、ストアに対して を行っていません。また、グリッドで更新を呼び出す必要があります。

于 2012-12-13T06:00:51.973 に答える