推迟ember.js app就绪,直到初始ajax调用返回

时间:2012-09-17 16:32:48

标签: javascript ember.js

(使用Ember 1.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'

任何想法我做错了什么?有没有更好的方法来实现我的目标?感谢。

2 个答案:

答案 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()
        ⋮