【问题标题】:ExtJS refreshing a view from the controllerExtJS 从控制器刷新视图
【发布时间】:2023-03-14 18:23:01
【问题描述】:

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

【问题讨论】:

    标签: javascript extjs extjs4 extjs-mvc


    【解决方案1】:

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

    现在到 refresh()

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

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

    【讨论】:

    • 好吧,这不是问题,但你说我不需要那条线的事实让我走上了正确的道路。原来问题出在我的商店文件中,在Model: 下,我只输入了模型文件名而不是整个名称。一旦我输入了全名,一切都只适用于商店加载。
    • @ArtF 只要它适合你 :) 感谢您接受
    【解决方案2】:

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

    【讨论】:

    • 你在说什么?你的回答毫无意义
    猜你喜欢
    • 2018-08-07
    • 2013-03-31
    • 2016-07-28
    • 2018-04-02
    • 2011-10-13
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多