ExtJS从控制器刷新视图

时间:2012-12-12 21:23:49

标签: javascript extjs extjs4 extjs-mvc

我在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',我试图刷新我的一个观点,我的方法是行不通的。任何人都可以向我解释我如何刷新视图?谢谢。

2 个答案:

答案 0 :(得分:2)

var grid_view= this.getView('browser.grid_file');替换为var grid_view= this.getView('browser.grid_file').create();以获取真实实例(正如我已经告诉您的那样,getView() only return the view config, not a instance!),或者如果您已经创建了该网格并且只存在一个实例,请使用xtype沿使用组件查询来接收它var grid_view=Ext.ComponentQuery('grid_file')[0]

现在进入refresh()

基本上,您永远不需要调用此方法,因为您的网格绑定到商店,并且对此商店所做的任何更改都会直接反映到您的网格中。

我还建议您在创建视图实例而不是使用查询时存储视图实例,或者直接使用 ref 属性,让ExtJS为您完成工作。最后一个是我猜的最佳解决方案......在API示例中查看ref并尝试一下。

答案 1 :(得分:0)

所以你要做的是,加载商店并在刷新grid_view后反映数据......? 在这种情况下,您没有对网格进行setStore(),或者如果您已在其他地方进行了此操作,那么您不会对商店进行setData()。你也应该在网格上调用刷新。