Sencha Touch 2:如何初始化包的控制器?

时间:2014-07-03 10:38:38

标签: android cordova extjs sencha-touch sencha-touch-2

我在工作区中有一个ST2.3应用程序,它使用由控制器和两个视图组成的包。 我可以在没有问题的情况下访问视图而无需在app.js中引用它们,但是我无法访问控制器,并且控制器无法捕获由包视图触发的事件。

我已经尝试通过在app.js中执行以下操作来引用控制器:

controllers: [
    'packageController', OR
    'packageController@package.controller', OR
    'package.controller.packageController'
    ...
]

无效并抛出未找到的"文件"错误。

工作区架构:

workspace/
    touch/
        ...
    STApp/
        ...
    packages/
        package1/
            src/
                view/
                    ...
                controller/
                    packageController.js

注意:该应用程序是针对Cordova的原生Android设备打包的。

有什么想法吗?

***编辑: 我在包的sencha.cfg中找到了这个,也许它是相关的,我必须以某种方式指定控制器文件夹? :

# This is the comma-separated list of folders where classes reside. These
# classes must be explicitly required to be included in the build.
#
package.classpath=${package.dir}/src

2 个答案:

答案 0 :(得分:1)

所以它可能是少数几件事之一。

首先,请确保您已使用正确的命名空间/路径在app.js中配置Ext.Loader:

Ext.Loader.setConfig({
    enabled : true,
    paths   : {
        'Ext' : '../touch/src',

        //assuming "Foo" is the namespace
        'Foo' : '../packages/foo/src'
    }
});

还要确保将您的包添加到"要求" app.json中的数组

requires : [
    'Foo' //name of the package from /packages/foo/package.json
]

接下来,检查packages/package1/src/controller/packageController.js中定义的实际类的名称。 Sencha Cmd可能有点挑剔......类名必须匹配文件名完全 - 以及你拥有的事实" packageController"因为文件名(在camelCase中)为我抛出一个红色标记。

一个真实的例子可能是packages/foo/src/controller/Bar.js,您可以找到Ext.define('Foo.controller.Bar', {})


此时,您应该能够在app.js中使用以下内容:

Ext.application({
    //...

    controllers : [
        'Bar@Foo.controller', //OR...
        'Foo.controller.Bar'
    ]
});

最后,您还必须使用Sencha Cmd运行sencha app refresh,这将重新生成您的引导程序文件。

在所有这些步骤之后以调试模式运行您的应用,您应该会看到packages/foo/src/controller/Bar.js的网络请求,并且(希望)它会加载到您的应用中。

答案 1 :(得分:0)

当我在st2中创建第一个控制器时,我遇到了同样的问题。我只是通过创建一个新文件手动创建它并正确地命名它认为它是错误的方式,并且很可能导致你描述的情况。

正确的方法是使用sencha命令生成控制器。

您是否使用它来创建控制器?我认为框架中有一些隐藏的东西,它不会识别你的控制器。当使用sencha generate controller <your controller name>创建控制器时,Sencha命令修改引导程序文件(至少我认为它),然后您可以在app.js中告诉您有这样的控制器:

controllers:[
     '<MyControllerName>'
]

在项目根文件夹中运行上面的命令,它应该可以工作。