2012-09-17 61 views
4

(使用灰燼1.0.pre推遲ember.js應用準備就緒,直到最初的AJAX調用返回

當給定用戶我Ember.js應用程序首次加載,我想提出一個Ajax調用並沒有加載任何直到該單個調用返回之前,與餘下的數據相關的數據。這裏就是我想我需要做的,但我不知道如何實現它:

  • 上的應用
  • 發起Ajax調用
  • 調用應用程序
  • 呼叫deferReadiness()實施ready()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' 

任何想法我做錯了嗎?有更好的方法來實現我的目標嗎?謝謝。

+3

此功能不在Ember 1.0.pre。你應該使用[ember-latest](http://cloud.github.com/downloads/emberjs/ember.js/ember-latest.js) – pjlammertyn

回答

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應用程序的啓動,直到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() 
     ⋮ 
相關問題