在Ember中,如何推迟准备,并将AJAX结果放入Controller中?

时间:2013-04-25 02:54:29

标签: ember.js promise

据我所知,Ember.Application现在有deferReadiness让我等到初始化应用程序之前返回AJAX调用。但是,在api docs的示例中,他们将值放入App中的全局变量:

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

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

我不想为令牌引入全局变量,而是将返回的值放入我的ApplicationController中。但是,我现在似乎无法找到如何获取控制器的句柄,即在jQuery回调中。

1 个答案:

答案 0 :(得分:9)

您可以在$.getJSON回调中reopen控制器在token属性中设置响应值。假设您有一个端点~/auth-token返回一个带有单个属性key的JSON,您可以执行以下操作:

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

(见fiddle