3

我正在构建一个 Ember.js 应用程序,使用 Ember 数据、ActiveModel 序列化程序和 Ember Simple Auth Devise,连接到 Rails API 并尝试了解如何构建加载单个资源的路由,在本例中为“我的帐户”页面为当前用户。

从 Rails 的角度来看,我不需要 ID,但在 Ember 方面,我不确定如何实现这一点。我的解决方法是提供一个占位符 ID,Rails 会忽略它。有没有更好的方法来实现这一点?

Ember.js:

MyAccountRoute = Ember.Route.extend(model: -> @store.find 'account', '1')

导轨:

def show
  @item = @current_user.account
end
4

4 回答 4

4

当您使用 find 时,Ember Data 有一个非常具体的实现

find用该类型调用只需要该类型的集合,这映射到findAll

find使用类型和原始类型(非对象)调用将期望该类型的单个对象响应,这映射到findById

find使用类型调用,并且对象将期望一个集合(可能通过发送的参数过滤服务器端),这映射到findByQuery

因此,使用 Ember Data 没有办法做到这一点,除非您想将其破解到您的其他实现之一中,或者使用 ajax 回调然后旁加载存储。我更喜欢使用您正在使用的模式,我这样做this.store.find('user', 'me'); 然后忽略参数。

于 2014-10-05T15:36:17.643 回答
0

我解决这个问题的方法是返回一个只包含一条记录的数组/记录集合。

然后在 Ember 中,您可以.get('firstObject')像这样访问这个单一结果

export default Ember.Route.extend({
  model: function() {
    return this.store.find('user').then(function (users) {
      return users.get('firstObject');
   });
 }
});

这感觉更像是 Ember 的做事方式,并且还避免了使用 Ember 开发人员工具插件时可能会注意到的问题;返回的数据实际上创建了一条重复记录 - 您最终会得到一个 id 为meor的空记录1和一条返回的单个记录的 ID 的完整记录。

另一种方法是继续使用meor1和设置或修改返回记录的 ID 以匹配。在这种情况下,您将返回单个对象而不是数组/集合。

于 2015-01-15T16:22:26.300 回答
0

Ember 数据有queryRecord方法。

此方法请求一条记录,其中 id 事先不知道

http://emberjs.com/api/data/classes/DS.Store.html#method_queryRecord

于 2016-08-24T07:35:32.063 回答
0

我将这两个答案结合起来,并将 queryRecord 与服务器忽略的参数一起使用。

return this.store.queryRecord('user_settings', {id: 'me'});

感谢 Binarytales 和 antulik

于 2016-08-29T15:46:00.180 回答