Extjs 5.1:视图控制器中的方法未调用

Extjs 5.1: method in a ViewController not invoked

本文关键字:方法 调用 控制器 视图 Extjs      更新时间:2023-09-26

我正在使用 Extjs 5.1,我想在 ViewController 中调用一个方法以下是我的观点:

Ext.define("bdociTabletProto.view.main.Main", {
extend: "Ext.container.Container",
requires: ['bdociTabletProto.view.main.MainController'],
controller: "mainController",
initComponent: function () {
    var me = this;
    me.layout = "border";
    ....
    me.items = [...];
    me.listeners = {
        afterlayout: 'onMainAfterLayout',
        scope: 'controller'
    };
    me.callParent(arguments);
}
});

这是我实现onMainAfterLayout方法的视图控制器:

Ext.define("bdociTabletProto.view.main.MainController", {
extend: 'Ext.app.ViewController',
alias: 'controller.mainController',
onMainAfterLayout: function (container) {
    var me = this;
    var docNavigator = me.getView().docNavigator;
    var workflowActions = me.getView().workflowActions;
    docNavigator.setHeight(container.getHeight());
    docNavigator.setWidth(container.getWidth() / 4);
    workflowActions.setPosition((container.getWidth() - workflowActions.getWidth()) / 2, 0);
}
});

这将引发异常:[E] Ext.util.Event.getFireInfo():无法动态解析 ext-comp-1010 上"afterlayout"侦听器的范围

第一次我写的侦听器没有范围,但是在谷歌搜索问题后,我发现在新版 Extjs (5.1) 中,我应该设置 Scope 属性。

如果不设置 scope 属性,错误如下所示: 未捕获错误:bdociTabletProto.view.main.Main 上没有名为"onMainAfterLayout"的方法

有人可以帮助我吗??谢谢

我找到了解决方案:

  • 在视图控制器中添加此内容

    control: { '#': { afterlayout: 'onMainAfterLayout' } },

  • 从视图中删除侦听器