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”下注意到我正在尝试刷新我的一个观点,那么我的方法不起作用。谁能向我解释如何刷新视图?谢谢你。

4

2 回答 2

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]

现在到刷新()

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

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

于 2012-12-13T07:16:52.587 回答
0

因此,您要做的是加载商店并在刷新 grid_view 后反映数据...?在这种情况下,您还没有setStore()对网格做 a,或者如果您在其他地方做过,您就没有setData()对商店做 a。此外,您应该调用网格上的刷新。

于 2012-12-13T06:00:51.973 回答