(使用Ember 1.0.pre
)
当我的Ember.js应用程序首次加载给定用户时,我想进行单个ajax调用,并且不会加载任何与ember数据相关的数据,直到单个调用返回。这是我认为我需要做的,但我不确定如何实现它:
ready()
deferReadiness()
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'
任何想法我做错了什么?有没有更好的方法来实现我的目标?感谢。
答案 0 :(得分:4)
你可以做这样的事情,例如将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();
答案 1 :(得分:0)
调用initialize
时出错。我需要延迟在Cordova运行的Ember应用程序的启动,直到Couchbase Lite启动。看起来像是:
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()
⋮