4

(使用灰烬1.0.pre

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

  • ready()在应用程序上实施
  • 调用deferReadiness()应用程序
  • 发起ajax调用
  • advanceReadiness()在 ajax 回调处理程序中调用

我不知道我需要如何或在哪里打电话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'

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

4

2 回答 2

4

You could do something like this, ex for using Ember together with 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();
于 2012-09-18T08:28:35.003 回答
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()
        ⋮
于 2014-05-24T00:56:17.773 回答