1

我已经使用 sencha touch 2.2.1 完成了我的第一个应用程序。现在我将它上传到我的服务器并尝试用我的手机访问它。一切正常。我的仪表板包含 6 个按钮,但只有 1 个在工作。互相抛出以下错误

TypeError:“未定义”不是对象(评估“name.substring”)

错误发生在函数 parseNamespace 中。但我不知道出了什么问题。我使用 Sencha Architect 构建了应用程序,在预览中一切都很好。测试包是使用架构师的构建按钮创建的。如果有人可以帮助我,该应用程序位于此处:app.ttv-rees-groin.de

非常感谢

4

2 回答 2

0

这可能是类加载的问题。在发生按钮事件时引用的类可能不会在当时加载。

打包应用程序时可能会错过这些类。

于 2013-12-23T08:56:49.633 回答
0

我的经验发现,Architect 的构建和打包工具创建了大量不必要的文件,远远超出了所需文件。技术细节:Architect 2 - 所有构建,Sencha Touch 2.0-2.2.x 包括其间的所有版本,Sencha Cmd 3.x

在 Architect 中开发的最干净和最精简的构建技术是使用 Sencha Cmd 保存然后启动构建。

sencha app build

这将执行默认的“生产”构建。

在这种情况下,输出的差异从生产文件夹中包含所有资源、库、扩展名等的 32MB 文件转储到总共 0.8MB 的最小所需文件,并且不再需要触摸库,因为只编译了所需的类进入应用程序。

至于手头的错误,这个错误与类命名空间、别名和xtype有关。

(快速感谢http://ruidevnotes.wordpress.com/2013/07/25/sencha-ext-js-4-common-typeerror/,为这 4 件事节省了很多打字时间)。

可能的解决方案:

  1. 如果类有控制器,请确保控制器的视图配置与类视图的 Ext.define 中指定的命名空间相匹配。示例:(控制器)视图:['namespace.of.my.View']
  2. 当在其他视图上使用类作为 xtype 时,确保视图的别名是 widget.[customXtype] 所以当将其作为项目添加到其他 vims 时,使用 xtype : [customXtype]
  3. 确保在 app.js 控制器上添加视图的控制器。
  4. 当类视图没有控制器并且您想在其他视图上使用它时,请确保在 Ext.require(['class.view.namespace.name']); 上添加该视图的命名空间。并指定 xtype 配置而不是别名。

最重要的是,我记得列表插件的一个问题,我相信它的行为与您遇到的错误相同。预建 - 会工作。发布构建,问题和错误。我能够绕过这个错误的方法是通过这种技术:

requires: [
    'Ext.XTemplate',
    'Ext.plugin.ListPaging'
],

config: {
    ..., // other standard configs removed for brevity
    plugins: [
        {
            xclass: 'Ext.plugin.ListPaging',
            autoPaging: true,
            type: 'listpaging'
        }
    ]
}

需要注意的是夸张的插件声明。如果没有这个全面的声明,ListPaging 插件只会在构建之后造成各种痛苦和混乱。

编辑:拼写。

于 2014-02-14T06:32:53.790 回答