【问题标题】:How can I bind a component method to a ViewModel in ExtJS?如何将组件方法绑定到 ExtJS 中的 ViewModel?
【发布时间】:2021-05-11 16:02:33
【问题描述】:

在 ExtJS 6.02 中,如果我有这个:

Ext.define('MyController', {
     extend : 'Ext.app.ViewController'
   , alias  : 'controller.myWindowController'
   , onShow: function() {
       console.log('IT SHOWS!');
   }
});

Ext.define('MyWindow', {
     extend: 'Ext.window.Window',
     controller: 'myWindowController',
     show: 'onShow'
});

ExtCreate('MyWindow', {}).show();  // Gives error here, `show` is a string now!

如何将组件方法绑定到控制器?
还是只能绑定事件?

【问题讨论】:

    标签: javascript methods extjs controller


    【解决方案1】:

    你正在做的是覆盖show method。相反,您似乎想监听 show 何时被触发...为此,您可以使用 listeners 配置,并监听 show 事件,如下所示:

    Ext.define('MyWindow', {
        extend: 'Ext.window.Window',
        controller: 'myWindowController',
        listeners: {
            show: 'onShow'
        }
    });
    

    【讨论】:

    • 谢谢!我想我可以在这种情况下做到这一点。但是如果有什么我真的需要重写呢?在这种情况下,是否仍然可以在 viewController 上进行操作?
    • 直接在ViewController上,不,因为show是你View上的一个方法。您可能会覆盖 View 中的 show 方法以调用 ViewController 中的方法,但我会质疑为什么您必须首先这样做。
    • 我有一个案例,我有一些无线电组,我想在它们上创建一个refresh 方法,并在显示我的窗口时调用它。另一种选择是从所示方法更改无线电组,但我认为如果我只调用refresh 并且无线电组会自行更改会更好。
    • 这不保证覆盖show 方法。老实说,您应该只在存在错误时覆盖框架方法,或者您需要以某种方式对其进行增强。在这种情况下,您最好使用事件/侦听器。
    • refresh 方法不会覆盖任何东西,它将是一个新方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2017-04-07
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    相关资源
    最近更新 更多