【问题标题】:Adding views and stores in controller dynamically - Ext-JS 4.1.1a在控制器中动态添加视图和存储 - Ext-JS 4.1.1a
【发布时间】:2012-12-14 22:27:10
【问题描述】:

我想在控制器中动态添加视图和存储。所以,我有这个:

Ext.define('App.controller.MyController', {
    extend: 'Ext.app.Controller',
    stores: ['App.store.Users'],
    views: ['App.view.Users.Index'],

我正在动态创建这个控制器:

var controller = this.getController("Users");

如何动态添加商店和视图,例如:

var controller = this.getController(moduleID);

controller.stores = [];
controller.views = [];

controller.stores.push('App.store.Users');
controller.views.push('App.view.Users.Index');

但是当我这样做时,它不起作用。控制台告诉我 Ext 不能“从未定义中缓冲”,所以我认为我必须使用 Ext.apply()Ext.merge() 或类似的东西来获得 getterssetters for @987654328 @。

你怎么看?

为@asgoth 编辑:

当您使用this.getController("nameOfController"); 并且控制器不存在时,Ext-JS 会为您创建一个。这是 100% 有效的,因为当我 console.log(controller); 我正在获取数据时(文档也这么说)。 :)

【问题讨论】:

  • 使用 Ext.define() 你只是在定义你的控制器。您应该使用 Ext.create() 或 new App.controller.MyController() 创建它
  • 查看编辑部分。 :)
  • 你有堆栈跟踪或者你能指出错误发生的位置吗?
  • 老实说,您尝试做的事情似乎很奇怪。 MVC 框架的 oop 设计的重点是控制器知道他们控制哪些视图(以及哪些模型/存储)。我不禁觉得有更好的方法来实现你想要做的事情。你能解释一下这样做的理由吗?
  • 我在这里与@Izhaki 在一起,尝试动态添加商店和视图似乎您试图避免需要创建显式控制器。如果是这种情况,您打算将控制视图和用户交互的逻辑放在哪里?

标签: javascript extjs


【解决方案1】:

您没有太多选择,因为在实例化控制器时需要准备好数组。默认情况下,这只发生一次,因为它应该由Ext.app.Application 控制器(实例)管理。

第一点是这里不能使用getController方法,因为它不接受任何额外的配置。所以最简单的解决方案是实现您自己的 getController 方法,稍微重命名以避免覆盖。

这是一个例子:

getControllerInstance: function(name, cfg) {
    var me = this.application,
        controllers = me.controllers,
        controller = controllers.get(name);

    if (!controller) {
        controller = Ext.create(me.getModuleClassName(name, 'controller'), Ext.ApplyIf({
            application: me,
            id: name
        },cfg);

        controllers.add(controller);
        if (me._initialized) {
            controller.doInit(me);
        }
    }

    return controller;
}

请注意,此变体不会向任何数组参数添加值,而是会覆盖任何现有参数!

还要注意,您的所有控制器都需要从具有此方法的控制器继承。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    相关资源
    最近更新 更多