推迟ember.js应用程序的准备状态,直到返回初始ajax调用



(使用Ember1.0.pre)

当我的Ember.js应用程序第一次为给定用户加载时,我想进行一次ajax调用,在该调用返回之前不加载任何与Ember数据相关的数据。以下是我认为我需要做的,但我不确定如何实现:

  • 在应用程序上实现ready()
  • 在应用程序上调用deferReadiness()
  • 启动ajax调用
  • 在ajax回调处理程序中调用advanceReadiness()

我不知道如何或在哪里需要呼叫deferReadiness()。这是我尝试过的,结果是:

SocialRoi = Ember.Application.create({
ready: function() {
this.deferReadiness();
console.log('SocialRoi almost ready...');
this.advanceReadiness();
return this._super();
}
});
// RESULT:
// Uncaught TypeError: Object SocialRoi has no method 'deferReadiness'

你知道我做错了什么吗?有没有更好的方法来实现我的目标?谢谢

您可以这样做,例如将Ember与SignalR一起使用。

APP = Ember.Application.create({
appname: "MyEmberApp",
ready: function () {
console.log("hello from ember");
if (Ember.empty($.connection.hub) || !$.connection.hub.stateChanged) {
alert('SignalR error');
return;
}
}
});
APP.deferReadiness();
$.connection.hub.url = 'http://localhost:8085/signalr';
$.connection.hub.logging = true;
$.connection.hub.start()
.done(function () {
console.log("SignalR started!");
APP.advanceReadiness();
})
.fail(function () {
alert('SignalR error)';
});
APP.Router = Ember.Router.extend({
...
});
APP.initialize();

调用initialize时出错。我需要推迟我在Cordova运行的Ember应用程序的启动,直到CouchbaseLite启动。看起来像:

App = Ember.Application.create()
App.deferReadiness()
⋮
;( function() {
function checkURL() {
if( ! window.cblite ) {
console.error( 'couchbase lite not present' )
} else {
cblite.getURL( function( err, url ) {
var adapter = App.__container__.lookup('store:main').adapterFor( 'application' )
url = url.substring( 0, url.length - 1 )
Ember.set( adapter, 'host', url )
App.advanceReadiness()
⋮

最新更新