0

我已经启动了一个非常基本的 EmberJS 应用程序,我想在 phonegap 应用程序中使用它。以下代码在 FF 4 中运行良好,但在 Chrome 和 Safari 中,车把部分中的视图未更新。

Main JS 文件具有以下代码。

(function(window) {
  function Main() {
    MainApp = Ember.Application.create({
      appname: "My App",
      ready: function() {
        console.log("hello from ember");
        app.initialize();
        app.deviceready();
      }
    });
  }
  window.Main = Main;
}(window))

我发现如果我删除了自我执行功能,它会在 webkit 中呈现得很好

MainApp = Ember.Application.create({
  appname: "My App",
  ready: function() {
    console.log("hello from ember");
    app.initialize();
    app.deviceready();
  }
});

所以我想真正的问题是为什么将 Ember.Application.create() 包装到 Main() 函数中会导致 webkit 出现这个问题?

在我的 index.html 文件中,我有以下脚本块来执行 main.js

<script type="text/javascript">
  function init() {
    var mainApp = new Main();
  }
</script>

然后我的车把代码看起来像这样。

<script type="text/x-handlebars">
  <h1>hello from {{MainApp.appname}}</h1>
</script>
4

1 回答 1

1

解决方案是采取

(function(window) {
  function Main() {
    MainApp = Ember.Application.create({
      appname: "My App",
      ready: function() {
        console.log("hello from ember");
        app.initialize();
        app.deviceready();
      }
    });
  }
  window.Main = Main;
}(window))

并做到

(function(window) {
  MainApp = Ember.Application.create({
    appname: "My App",
    ready: function() {
      console.log("hello from ember");
      app.initialize();
      app.deviceready();
    }
  });
})(window)

这仍会根据需要将 MainApp 分配给窗口/全局上下文,但会删除未初始化函数的依赖关系。我不确定您是如何init()在 HTML 中调用该函数的,但它似乎从未真正new Main()为您初始化对象。

于 2012-08-02T14:34:27.390 回答