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

Kev*_*uli 5 promise ember.js

我知道Ember.Application现在有deferReadiness,它允许我在初始化应用程序之前等待AJAX​​调用的返回.但是,在api文档的示例中,他们将值放入App中的全局变量:

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

jQuery.getJSON("/auth-token", function(token) {
  App.token = token;
  App.advanceReadiness();
});
Run Code Online (Sandbox Code Playgroud)

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

Mil*_*Joe 9

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

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();
});
Run Code Online (Sandbox Code Playgroud)

(见小提琴)