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

4

(使用 Ember 1.0.pre)

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

  • 在应用程序上实现 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'

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


3
这个函数不在Ember 1.0.pre中。你应该使用ember-latest - pjlammertyn
2个回答

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

0

在调用initialize时,我遇到了一个错误。我需要延迟启动我的Ember应用程序在Cordova中运行,直到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()
        ⋮

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接