![](/img/trans.png)
[英]Ember RSVP Promise for model not resolving with firefox addon port messaging scheme
[英]Promise in Ember route model not resolving/updating
我正在使用Ember Simple Auth和一种注入到应用程序控制器中的服务,以跟踪当前登录的用户。 通过执行以下操作,我可以为我的应用程序模板中的当前登录用户使用{{accountName}}
:
//controllers/applications.js
import Ember from 'ember';
export default Ember.Controller.extend({
session: Ember.inject.service(),
userFromSession: Ember.inject.service('session-user'),
accountName: Ember.computed('session.data.authenticated.userId', function(){
this.get('userFromSession.user').then((user)=>{
if (Ember.isEmpty(user.get('company'))) {
this.set('accountName', user.get('firstName') + ' ' + user.get('firstName'));
} else {
this.set('accountName', user.get('company.name'));
}
});
})
});
我的session-user
服务如下所示:
//services/session-user.js
import Ember from 'ember';
import DS from 'ember-data';
const { service } = Ember.inject;
export default Ember.Service.extend({
session: service('session'),
store: service(),
user: Ember.computed('session.data.authenticated.userId', function() {
const userId = this.get('session.data.authenticated.userId');
if (!Ember.isEmpty(userId)) {
return DS.PromiseObject.create({
promise: this.get('store').find('user', userId)
});
}
})
});
现在,用户拥有公司,而公司拥有机会。 我想根据当前登录的用户检索公司机会。 我该怎么做呢? 在我的opportunities
路线中,我尝试了以下方法:
//routes/opportunities/index.js
import Ember from 'ember';
export default Ember.Route.extend({
sessionUser: Ember.inject.service('session-user'),
model: function(){
this.get('sessionUser.user').then((user)=>{
let companySlug = user.get('company.slug');
console.log(companySlug);
return this.store.findRecord('company', companySlug);
});
}
});
在我的模板中使用{{model.opportunities}}
时,它保持空白,并且看起来诺言从未解决。 但是,我可以在Ember Inspector中看到数据填充,以及控制台日志的预期输出。 此外,当我执行以下操作时,它可以正常工作:
//routes/opportunities/index.js
import Ember from 'ember';
export default Ember.Route.extend({
model: function(){
let companySlug = 'known-company-slug';
return this.store.findRecord('company', companySlug);
}
});
这意味着问题出在模型由于某种原因无法解析/更新。 我在这里做错了什么?
好的,当我已经可以通过sessionUser
服务访问公司模型时,我正尝试获取它。
//routes/opportunities/index.js
import Ember from 'ember';
export default Ember.Route.extend({
sessionUser: Ember.inject.service('session-user'),
model: function(){
return this.get('sessionUser.user').then(user => user.get('company'));
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.