【问题标题】:EXTJS5 MVVM: Get global controller from view controllerEXTJS5 MVVM:从视图控制器获取全局控制器
【发布时间】:2014-07-30 01:26:24
【问题描述】:

从一个全局控制器,我可以很容易地得到另一个全局控制器的引用

this.getController('TargetController');

但是,在视图控制器的上下文中,我怎样才能获得对同一控制器的引用?即:

Ext.define('myCoolApp.view.SomeNeatController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.someneat',

    // this is bound to a button click event, let's say.
    onClick: function(button) {

        // How to get a reference to a global controller here? 
        // this.getController('TargetController'); is not defined
        // on the view controller....

    }

});

可能我缺少一些简单的东西,但我们将不胜感激。

【问题讨论】:

  • 在 99.99% 的情况下,如果您需要在 Ext JS 5 中获取对全局控制器的引用,那么您做错了。目的是什么?
  • 我以为有人会问这个。 :) 我必须从 web 服务(google drive api)中检索一些数据,并且我将这个逻辑(包含所有 oauth2 的东西)很好地抽象到了以前的 ExtJS4 项目的控制器中。我需要从我在视图控制器中处理的事件中开始数据检索。它可能不是 100% 理想的架构,但在我看来,仅仅为了适应设计模式而重构工作、测试(和漂亮)的代码是更不可取的。
  • 控制器事件域是这里使用的工具。查看我的帖子:nohuhu.org/development/controller-events-in-ext-js-4-2nohuhu.org/development/…
  • 整洁。这以前不在我的雷达上。 ext 5.0.0 文档中的一个小错误:Ext.app.EventDomain 类将控制器域列为从 Ext.app.Controller 扩展的所有类。视图控制器不从 Ext.app.Controller 扩展,(尽管它们共享一个共同的 Ext.app.BaseController 基础)但控制器事件域确实侦听从视图控制器触发的事件。无论如何,谢谢你的提示。

标签: javascript extjs mvvm extjs5


【解决方案1】:

在你的命名空间上调用 getController 应该可以工作:

myCoolApp.app.getController('TargetController');`

【讨论】:

  • 我也在寻找这个的答案,但找不到。这不是全球电话吗?在这种情况下,您的控制器必须知道您有一个 myCoolApp 和一个 TargetController,这使得它非常依赖这些东西。我不喜欢这个解决方案。
  • 我不喜欢一开始就知道视图控制器中的全局控制器的必要性。如果您需要,该应用程序需要重新设计。我用 Ext 5 和 Ext 6 编写了几个非常大的应用程序,但我从来不需要它。
猜你喜欢
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 2012-08-11
  • 1970-01-01
相关资源
最近更新 更多