在我的应用程序路由中,我获得了当前会话和用户。

/routes/application.js

import Ember from 'ember';

export default Ember.Route.extend({

    beforeModel: function() {
      return this.get('session').fetch().catch(function() {});
    },
    model () {
      return this.store.findRecord('user', this.get('session.currentUser.uid'));
    }
});


我的模型设置如下:

/models/bet.js

import DS from 'ember-data';

export default DS.Model.extend({
  created: DS.attr('date'),
  user: DS.belongsTo('user', { async: false })
});


/models/user.js

import DS from 'ember-data';

export default DS.Model.extend({
  email: DS.attr('string'),
  firstName: DS.attr('string'),
  lastName: DS.attr('string'),
  bets: DS.hasMany('bet', { async: true })
});


在我的/ bets路线中,我只想加载user == session.currentUser.uid上的下注,或者以类似的方式仅获取当前用户的bets

我尝试过找到没有结果的最佳方法。

最佳答案

niave方法是将所有投注过滤为您想要的投注。基于api的解决方案可能是1)对服务器的请求使用查询参数,2)像/users/2/bets这样的嵌套url。无论哪种情况,您都必须在服务器上实现。

示例1)过滤器

import Ember from 'ember';

export default Ember.Route.extend({
  model () {
    return this.store.findAll('bet').then((bets) => {
      const currentUserId = this.get('session.currentUser.uid')
      return bets.filter((bet) => {
        return bet.get('user.id') === currentUserId
      })
    });
  }
});


示例2)查询。您的服务器将必须使用资源

import Ember from 'ember';

export default Ember.Route.extend({
  model () {
    return this.store.query('bet', {
      userId: this.get('session.currentUser.uid')
    })
  }
});


示例3)嵌套属性。
为此,您需要做两件事:


用户具有这样的links属性:`{bets:'api / users /:uid / bets'}
您的服务器必须能够响应请求/api/users/:uid/bets并仅返回用户的投注


码:

import Ember from 'ember';

export default Ember.Route.extend({
  model () {
    const currentUser this.store.peekRecord('user', this.get('session.currentUser.uid'))
    return currentUser.get('bets') // sends request to `api/users/:uid/bets`
  }
});

09-19 08:49