在Sencha Touch

时间:2015-04-29 08:47:42

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

我们使用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中寻找文件那样调用服务器。任何人都可以看到我出错的地方,或者甚至可以用手机触摸。

由于

1 个答案:

答案 0 :(得分:1)

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

<强> AppName的

在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)