无法使用ST2访问NameSpace.app变量?

时间:2013-03-11 16:23:11

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

我正在使用Sencha Command Line 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

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

1 个答案:

答案 0 :(得分: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代码放在一个大的压缩文件中。