如何将Ember添加到Phonegap中的onDeviceReady事件?

giv*_*nse 1 javascript ember.js cordova

在Phonegap中,我们等待onDeviceReady事件让我们的代码开始执行.按照这条路径,我添加了我的Ember应用程序:

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
    }
});

}
Run Code Online (Sandbox Code Playgroud)

我知道我可以在外面初始化一个Ember应用程序onDeviceReady,一切都会继续工作.问题是应用程序的索引页面调用了设备API,并且在Ember开始工作之前必须发生一些DOM事件.

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

如何针对更大的应用程序解决此设计,我希望将每个Ember控制器/视图/模板放在自己的文件中?我无法用addMyEmberStuff功能包装所有东西.

Rya*_*yan 7

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

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

App.deferReadiness();

document.addEventListener('deviceready', function() {
  App.advanceReadiness();
});
Run Code Online (Sandbox Code Playgroud)

一旦advanceReadiness被称为Ember将开始为您的应用程序路由.