【问题标题】:Load and initialise controller dynamically in Sencha Touch在 Sencha Touch 中动态加载和初始化控制器
【发布时间】:2015-04-29 08:47:41
【问题描述】:

我们使用 extjs v4.2 和 sencha touch v2.3

我目前正在从事一个涉及动态加载控制器的项目。这对我来说在 extjs 中效果很好,但我无法在 sencha touch 中获得相同的功能。

当我想在 extjs 中加载控制器时,我使用以下语法

    var controllerLookup = 'here.app.controller.' + controllerName;

    AppName.app.getController(controllerLookup);

然后返回到服务器,下载控制器并调用它的 init 方法。

我想要 sencha touch 中完全相同的功能。通过阅读文档,语法看起来应该类似地工作,但我似乎无法让它工作。当我在控制台中运行代码时,我只是得到一个未定义的。不像我在 extjs 中查找文件那样调用服务器。谁能看到我哪里出错了,或者甚至可以在煎茶触摸中做。

谢谢

【问题讨论】:

    标签: javascript extjs sencha-touch sencha-touch-2 extjs4.2


    【解决方案1】:

    在 sencha 论坛 (https://www.sencha.com/forum/showthread.php?198019-How-to-load-controllers-dynamically) 上的帖子的帮助下,我能够让它工作。控制器现在动态加载并调用 init 方法

    应用名称

    在 app.js 或等效项中定义应用程序时在 Ext.Application 中使用的名称。

    类路径

    控制器文件的完整命名空间

    function addControllerDynamicallyForMobile(classPath, config) {
        var app = AppName.app.application,
            config = config || {};
        Ext.Loader.setConfig({ enabled: true });
        Ext.require(classPath, function() {
            var controllers = app.getControllerInstances();
            if (!controllers[classPath]) {
                var controller = Ext.create(classPath, Ext.apply({
                    application : app
                }, config.options || {}));
                controllers[classPath] = controller;
                app.controllers.push(classPath);
                controller.init();
                if (config.callback) { config.callback.call((config.scope || this), config); }
            }
        });
    };
    

    调用这个函数

    var controllerLookup = 'here.app.controller.' + controllerName;;
    addControllerDynamicallyForMobile(controllerLookup)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多