2

我正在使用 Sencha 命令行 3 工具和新生成的 Sencha Touch 2 应用程序。

假设我的 app.js 文件如下所示:

Ext.application({
  name: "CA",
  event_code: "test123",
  launch: function() {
   console.log("application launched!");
  }
});

我的视图和对象存储依赖于生成一个基于 CA.app.event_code 等于“test123”的 URL;

在浏览器中开发期间,一切正常,CA.app 返回我需要的变量。

当我使用 sencha app build 编译我的应用程序并尝试在浏览器中运行缩小版本时,我收到如下错误:

Error evaluating http://localhost:8888/app.js with message: TypeError: Cannot read property 'event_code' of undefined localhost:11

我不完全确定为什么会发生这种情况或如何解决它。我对任何和所有想法或建议持开放态度,任何正确方向的指示将不胜感激。

4

1 回答 1

4

遇到完全相同的问题。您无法访问视图中的命名空间应用程序......真的很糟糕,它们让您在开发中而不是在构建时。无论如何,我通过添加一个静态助手类并在我的应用程序中使用它来解决它:

在 /app/util/Helper.js 中:

Ext.define('MyApp.util.Helper', {
  singleton: true,
  alternateClassName: 'Helper',
  config: {
    foo: "bar",
    bat: "baz"
  },
  staticFunction: function() {
    // whatever you need to do...
  }
});

然后在您的视图或控制器中:

Ext.define('MyApp.view.SomeView', {
  ...
  requires: ['Events.util.Helper'],
  ...
  someViewFunction: function() {
    var someValue = Helper.staticFunction();
    // and you can use Helper.foo or Helper.bat in here
  }
});

作为参考,这里有一些关于Sencha Singletons的文档。还有一个重要的注意事项:确保您的 Helper 单例在它自己的文件中!如果它很小,你可能会倾向于把它放在你的 app.js 的底部,一开始一切都会好起来的,构建过程也会起作用,但代码不会。不用担心,构建过程无论如何都会将所有 JS 代码放在一个大的压缩文件中。

于 2013-03-11T16:48:34.340 回答