Ember.js:将Em.$.getJSON转换为对控制器上下文的promise和绑定响应的正确方法?

Mat*_*lič 7 javascript ember.js

我正在使用$ .getJSON获取一些我希望异步绑定到控制器上下文的数据.我已经在我的路线中想出了这个 - 这有效,但我对它并不满意:

setupController: function(controller, model) {
  this._super(controller, model);
  Em.RSVP.Promise.cast(Em.$.getJSON((this.get('ENV.apiBaseURL')) + "/users/current/live_matchday_stats")).then((function(_this) {
  return function(s) {
    return _this.controller.set('matchdayStats', Em.Object.create(s));
  };
}
Run Code Online (Sandbox Code Playgroud)

然后,在我的模板中,我可以使用:

Foo: {{matchdayStats.foo}}
Run Code Online (Sandbox Code Playgroud)

它工作得很好.有没有更好的方法来编写它(可能没有promise casts和Em.Object创建) - 我知道如果我将Em.$.getJSON放入模型钩子中,这会自动生效.

jmu*_*yau 1

您可以使用DS.PromiseObject

var matchdayStats = DS.PromiseObject.create({
  promise: Em.$.getJSON((this.get('ENV.apiBaseURL')) + "/users/current/live_matchday_stats")
});

controller.set('matchdayStats', matchdayStats);
Run Code Online (Sandbox Code Playgroud)

这是 Ember Data 访问/显示相关对象以及模板中这些对象的属性的方式。