【问题标题】:ExtJS 4 - how to call function from a certain controller in different viewsExtJS 4 - 如何在不同视图中从某个控制器调用函数
【发布时间】:2012-06-18 12:17:09
【问题描述】:

我有一个在我的控制器中描述的功能。该函数负责从不同的视图创建我需要在不同情况下使用的表单。是否有可能以及从我需要的视图中调用此函数的方法是什么,而无需在每个控制器中添加相同的代码。

这是我尝试使用其他控制器的方法的控制器代码:

Ext.define('MY.controller.EventsController', {
    extend: 'Ext.app.Controller',
    models: [
        'EventsRecord'],

    stores: [
        'Events'],

    views: [
        'EventsGrid'],
    refs: [{
        ref: 'EventsGrid',
        selector: 'CalendarEvent'
    }],

    init: function () {
        this.control({
            'CalendarEvent': {
                afterEditFinish: this.askForNotify,
                deleteEvent: this.deleteEvent,
                calendarEditFunc: this.calendarEditFunc,
                addCalendarEvent: this.addCalendarEvent,
                itemclick: this.onSelectEnableBtn
            }
        })

    },

在这里我尝试使用类似var contr = Ext.getController('SomeController');and..nothing..

askForNotify: function(editor, e) {...

【问题讨论】:

    标签: extjs extjs4 extjs-mvc


    【解决方案1】:

    使用singleton: true 使其成为全局类的一部分,并从代码中的任何位置访问它。仅从视图中调用控制器方法有点违反 MVC 范式...

    更新:如果您确实无法更改现有代码 - 请执行以下操作。

    在某处保存对您的应用程序的引用(假设您的应用程序定义了类似的内容:

    Ext.application({
    
       launch: function() {
          _myAppGlobal = this;
       }
    });
    

    使用这个变量来获得你想要的控制器:

    _myAppGlobal.getController('MyController');
    

    【讨论】:

    • 不可以和getController一起调用函数吗?我试过 Ext.getController('name')this.getController('name') and both gave me a mistake getController is not a function` 但我认为这是正确的方法。
    • getController 是 Ext.app.Controller 类中的一个方法,因此您需要引用当前视图的控制器——我认为这又是针对 MVC 的 :)
    • 事实上,让我解释一下 - 我有一个邮件通知表单,应该在不同的场合(从不同的视图,不同的事件)显示,但表单是在一个控制器中定义的。你认为什么是实现这样的事情的最佳方式。显然复制粘贴代码不是正确的解决方案,我认为应该有一种适当的方法将代码放在一个地方并从许多地方使用它,但我不确定具体该怎么做?
    • 为什么不能从不同的地方创建一个视图?控制器代码会自动拾取它。
    • 您不需要手动创建控制器的实例。它们是由应用类创建的。
    【解决方案2】:

    你可以用这个-

    this.getController('Controller Name').someFn();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      相关资源
      最近更新 更多