-->

getController()不加载文件,并且不激发init和劳克(getController()

2019-09-29 13:10发布

我想只有在特殊情况下加载在运行某些控制器。 在这段视频中http://de.slideshare.net/senchainc/mvc-in-depth-part-2-tommy-maintz/说,你可以用getController做到这一点。 如果控制器不会在这个时候加载的文件被加载并初始化并启动控制器被解雇。

但如果我尝试这样的:

var myController = this.getApplication().getController("MyController"); myController.test(); //-- Uncaught TypeError: Cannot call method 'test' of undefined

是myController的不确定和init和发射不会被触发。

这是功能不存在了的煎茶2.2? 我一定要包括所有控制器的应用程序的“控制器”阵列中? 是否有任何其他方式来加载后应用程序启动控制器?

Answer 1:

this.getApplication()未在煎茶触摸2.x的几个最新版本使用 为了得到你需要运行的应用程序实例:

yourAppName.app.getController(...)



Answer 2:

有几个非常有效的理由这样做,而不是其中最重要的是,并不是所有您的应用程序必须首先加载,这样可以加快了一点东西。 它也可以让你有你的应用程序的某些部分只得到加载基于用户许可或用户的会话期间所采取的行动。 在我的桌面应用程序,我有一个只能由管理员用户可以看到的部分,所以我用MyApp.app.getController(“AppControllerAdministration”)来获得类加载器加载的管理控制器。

通过SashaZd注释其实是不正确的,在我的经验,至少。 我从在应用中的“控制器”数组中删除该控制器,并使用getController迫使它加载。 否则,它有应用程序启动时,这是我觉得OP试图避免。 至少在4.2.2(使用煎茶建筑师3)什么工作对我来说是还删除对专门用于从app.js.该控制器任何商店,视图,或者模型参考 然后,您可以把它们放在控制器的“查看”,“模式”,和“存储” CONFIGS(例如在后结束)。 所以在我的应用程序,如果我检查权限和用户是管理员创建的管理界面和所有的商店,视图控制器和模型它需要得到加载为好。 但他们并不在那里,直到我这样做。 你可以看他们获取加载在调试器。

注:这意味着你可能需要显式地加载你的商店或创建你的意见,因为他们可能不会被自动创建。 此外,在发展模式的ExtJS将“建议”你把他们在app.js,您将需要忽略。 像“[Ext.Loader]同步加载‘MyApp.controller.EditUserController’;考虑加入Ext.require(‘MyApp.controller.EditUserController’)以上Ext.onReady”的消息其实正是你想要的!

您也可以选择加载基于用户操作的控制器。 我用一个下拉的价值做这里面AppControllerAdministration.js:

var controllerName = 'MyApp.controller.Edit' + resourceType + 'Controller',
    newController = this.application.getController(controllerName),

要小心,你会希望确保newController实际上得到正确加载。

通过这一切的例子,这里是我的控制器的声明的开头:

Ext.define('MyApp.controller.AppControllerAdministration', {
    extend: 'Ext.app.Controller',

    models: [
        'Resource',
        'EditorSection',
        'Permission',
        'Role'
    ],
    stores: [
        'Resources',
        'Roles',
        'Users',
        'Routes'
    ],
    views: [
        'EditRoles',
        'EditUsers',
        'EditRoutes'
    ]


Answer 3:

您已经添加控制器在app.js文件控制器的列表?

示例代码::

Ext.application({
    name: 'myApp',
    requires:[
        'Ext.TitleBar'
    ],
    controllers: ['myDefaultController', 'onlyWhenCalledController', 'otherRandomController'],
. . . . 
});

只有当你这样做,那么你可以使用getController功能。 否则你调用控制器是不确定的。

除此之外,当然,你需要为你在你的应用程序控制器文件夹下的同名控制器工作的代码。 当两个以上的在你的应用程序,只有这样,你完全调用上述工作的功能。



文章来源: getController() doesn't load file and doesn't fire init and lauch