我是否适当地承诺了承诺?

时间:2015-09-21 10:36:53

标签: ember.js ember-cli

我正在尝试显示当前登录的用户。

很少有事情需要注意。 userasyncprofile的关系。在user模型中,我有:

profile: DS.belongsTo('polymorphable', { polymorphic: true, async: true }),

我的申请路线有:

model() {
  return this.store.findRecord('user', this.currentSession.get('id'));
},

应用程序模板具有以下内容:

<div class="profile-photo">
  {{image-tag imageUrl=model.profile.imageUrl}}
</div>

image-tag组件对象具有计算属性:

src: Ember.computed('imageUrl', {
  get() {
    let imageUrl = this.get('imageUrl');
    console.log(imageUrl.indexOf('imgix') > -1) // returns error
  }
})

我得到Uncaught TypeError: Cannot read property 'indexOf' of undefined。发生这种情况是因为model.profile返回一个承诺,并且在呈现模板时仍在解析。

这就是我的工作方式。我创建了一个afterModel钩子:

afterModel: function(model, transition) {
  model.get('profile').then(profile => {
    this.controller.set('profile', profile);
  });
},

然后在应用程序模板I中,改为:

<div class="profile-photo">
  {{#if profile}}
    {{image-tag imageUrl=profile.imageUrl size="mini" class="-small -round"}}
  {{/if}}
</div>

告诉Ember等待profile从承诺中解决。

这看起来&#34;脏&#34;?非常好吗?或者我应该考虑另一种方法吗?

1 个答案:

答案 0 :(得分:1)

实际上,您只需要

afterModel: function(model, transition) {
  return model.get('profile');
}

然后,您可以照常访问model.profile。有关详细信息,请参阅标记为可能重复的问题。