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

Ember.js: Proper way to cast Em.$.getJSON into a promise and bind response to controller context?

本文关键字:控制器 绑定 上下文 方法 响应 promise Em js getJSON Ember 转换      更新时间:2023-09-26

我正在用$.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));
  };
}

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

Foo: {{matchdayStats.foo}}

而且效果很好。有没有更好的方法来写这篇文章(也许没有promise强制转换和Em.Object创建)-我知道如果我把Em.$.getJSON放入模型挂钩中,这会自动起作用。

您可以使用DS.PromiseObject

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

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