Javascript 如何在Phonegap中将余烬添加到onDeviceReady事件中?

Javascript 如何在Phonegap中将余烬添加到onDeviceReady事件中?,javascript,cordova,ember.js,Javascript,Cordova,Ember.js,在Phonegap中,我们等待ondevicerady事件,以便代码开始执行。按照此路径,我添加了我的余烬应用程序,如下所示: var App = null; // Ember var phonegap = { initialize: function () { this.bindEvents(); }, bindEvents: function () { document.addEventListener('deviceready',

在Phonegap中,我们等待
ondevicerady
事件,以便代码开始执行。按照此路径,我添加了我的余烬应用程序,如下所示:

var App = null; // Ember

var phonegap = {
    initialize: function () {
        this.bindEvents();
    },
    bindEvents: function () {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function () {
        App = Ember.Application.create({});
        // Now I can start adding my Ember stuff, but
        // even for a tutorial app that is somewhere between
        // 100 to 200 lines and it will be harder to maintain
        // inside here. So I wrap that with a function
        // and put it outside.
        addMyEmberStuff();
    }
}

function addMyEmberStuff() {

// Ember Routes, Controllers, Views etc.
App.Router.map(function() {

});

App.IndexController = Ember.Controller.extend({
    init: function () {
        this._super();
        // device API calls
        // create/render View(?)
        // trigger DOM events etc
    }
});

}
我知道我可以在
ondevicerady
之外初始化一个余烬应用程序,一切都会继续工作。问题是,应用程序的索引页调用了设备API,而且在Ember开始发挥其魔力之前,必须发生一些DOM事件

在我看来,这是正确的做事方式


对于一个更大的应用程序,我希望每个余烬控制器/视图/模板都在自己的文件中,我该如何解决这个问题?我不能一直使用
addMyEmberStuff
函数包装所有内容。

您希望在PhoneGap准备就绪之前阻止您的余烬应用程序启动。为此,您可以使用延迟和提前准备

App = Ember.Application.create()
App.Post = ...
App.PostsRoute = ...
App.PostsController =  ...

App.deferReadiness();

document.addEventListener('deviceready', function() {
  App.advanceReadiness();
});

一旦调用了
advanceReadiness
,Ember将开始为您的应用程序路由。

您希望在PhoneGap准备就绪之前阻止您的Ember应用程序启动。为此,您可以使用延迟和提前准备

App = Ember.Application.create()
App.Post = ...
App.PostsRoute = ...
App.PostsController =  ...

App.deferReadiness();

document.addEventListener('deviceready', function() {
  App.advanceReadiness();
});

一旦调用了
AdvanceRadiness
,Ember将开始为您的应用程序发送路由。

不确定这是否是问题所在,但您有一个拼写错误
bindEvents:function(){
,应该是
bindEvents:function(){
对于应用程序结构,您可以查看,EAK或ember cli都与此无关,而且前者计划由后者取代。不确定这是否是问题所在,但您有一个拼写错误
bindEvents:function(){
,应该是
bindEvents:function(){
对于应用程序结构,您可以查看,EAK或ember cli都与此无关,而且前者计划由后者取代。