4

(Emberを使用1.0.pre

Ember.jsアプリが特定のユーザーに対して最初に読み込まれるときに、単一のajax呼び出しを行い、その単一の呼び出しが戻るまでember-data関連のデータを読み込まないようにします。これが私がする必要があると思うことですが、それを実装する方法がわかりません:

  • 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

たとえば、SignalRと一緒にEmberを使用する場合は、このようなことを行うことができます。

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。Couchbase Liteが起動するまで、Cordovaで実行されているEmberアプリの起動を遅らせる必要がありました。それは次のようになります:

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 に答える