为什么EmberJS不会在webkit浏览器上的HTML / Handlebars中呈现

时间:2012-08-02 13:38:10

标签: cordova webkit ember.js

我有一个非常基本的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>

1 个答案:

答案 0 :(得分: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分配给窗口/全局上下文,但会删除未初始化函数的依赖关系。我不确定你是如何在HTML中调用init()函数的,但似乎从未真正为你初始化new Main()对象。