2012-08-02 69 views
0

我有一个非常基本的EmberJS应用程序,我想在phonegap应用程序中使用。以下代码在FF 4中效果很好,但在Chrome和Safari中,视图在句柄部分中未更新。为什么EmberJS不能在webkit浏览器的HTML/Handlebars中渲染

主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

的解决办法是采取

(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()对象。