我正在尝试在ember项目中找到与当前用户关联的帐户。我可以通过{{account.user.id}}
获取用户ID并将其传递给手柄脚本。但是,我在模型钩子中查找具有此用户ID的帐户的所有尝试均未成功。
我在current / my-account.js中的当前模型钩子:
model (params) {
let accountID = this.store.query('account', { filter: { user: { id:currentUser} } });
console.log(accountID.id);
return this.get('store').findRecord('account', accountID);
}
accountID作为ember类返回,但我似乎无法从中解析任何数据。我如何从返回的ember类中获取ID以将其传递给我的get请求?
答案 0 :(得分:2)
要从Ember对象获取和设置属性,您必须使用get
和set
,例如:
console.log(account.get('id'));
更重要的是,您的.query
将(或应该至少)返回与过滤器匹配的account
模型数组。它将包含在一个承诺中 - 因为它是异步网络呼叫 - 因此您需要.then
它。你可能只想抓住第一个帐户:
model() {
return this.store.query('account', { filter: { user: { id: currentUser } } })
.then(function(accounts) {
return accounts.get('firstObject');
});
}
如果你有一个合适的{json:api},你可以获得user
,然后从例如account
获得/api/users/:id/account
关系。 model() {
return this.store.findRecord('user', currentUser)
.then(function(user) {
return user.get('account');
});
}
。您的模型钩子看起来像:
export default Ember.Component.extend({
selectedVidAPos: 0,
selectedVidBPos: 0,
selectedStackIndex: 0,
stackStyle: '',
playerSize: '',
isMuted: true,
showVidA: true,
init() {
...
}
},
videoA: Ember.computed('videos', 'selectedVidAPos', function () {
return this.get('videos')[this.get('selectedVidAPos')];
}),
videoB: Ember.computed('videos', 'selectedVidBPos', function () {
return this.get('videos')[this.get('selectedVidBPos')];
}),
actions: {
stackClicked() {
this.get('onClickCallback') (this.get('videos'), (this.get('showVidA') ? this.get('selectedVidAPos') : this.get('selectedVidBPos')));
},
getNextVideoA() {
let arrayLength = this.get('videos').length;
if (arrayLength === 1) {
return;
}
let curArrayPos = parseInt(this.get('selectedVidAPos'));
this.set('selectedVidAPos', (curArrayPos + 2) % arrayLength);
this.set('showVidA', false);
},
getNextVideoB(){
let arrayLength = this.get('videos').length;
if (arrayLength === 1) {
return;
}
let curArrayPos = parseInt(this.get('selectedVidBPos'));
this.set('selectedVidBPos', (curArrayPos + 2) % arrayLength);
this.set('showVidA', true);
},
stackHovered() {
this.get('onHoverCallback') (this.get('videos'), this.get('selectedStackIndex'));
}
}
});