我正在尝试显示当前登录的用户。
很少有事情需要注意。 user
与async
有profile
的关系。在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;?非常好吗?或者我应该考虑另一种方法吗?
答案 0 :(得分:1)
实际上,您只需要
afterModel: function(model, transition) {
return model.get('profile');
}
然后,您可以照常访问model.profile
。有关详细信息,请参阅标记为可能重复的问题。