2013-04-25 3 views
5

Capisco che Ember.Application ora ha deferReadiness che mi consente di attendere il ritorno di una chiamata AJAX prima di inizializzare l'app. Tuttavia, nell'esempio la documentazione API, hanno messo il valore in una variabile globale in App:In Ember, come differire la prontezza e mettere il risultato AJAX in un controller?

App = Ember.Application.create(); 
App.deferReadiness(); 

jQuery.getJSON("/auth-token", function(token) { 
    App.token = token; 
    App.advanceReadiness(); 
}); 

Piuttosto che introdurre una variabile globale per il token, voglio mettere il valore restituito nel mio ApplicationController. Tuttavia, non riesco a trovare come ottenere un handle su un controller a questo punto, ad esempio nel callback jQuery.

risposta

9

È possibile reopen il proprio controller nella chiamata $.getJSON per impostare il valore di risposta nella proprietà token. Supponendo di avere un punto finale ~/auth-token restituisce un JSON con un singolo attributo key, si può fare qualcosa di simile:

window.App = Ember.Application.create(); 

App.ApplicationController = Em.Controller.extend({ 
    token: '' 
}); 

App.deferReadiness(); 

$.getJSON("/auth-token", function(token) { 
    console.log(token.key); 
    App.ApplicationController.reopen({ 
     token: token.key 
    }); 
    App.advanceReadiness(); 
}); 

(vedi fiddle)

+0

Ho appena saputo che ci sarebbe un modo! –