在ember中查找属于关系的数据

时间:2017-06-13 18:20:57

标签: javascript ember.js

我正在尝试在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请求?

1 个答案:

答案 0 :(得分:2)

要从Ember对象获取和设置属性,您必须使用getset,例如:

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'));
    }
}
});