【问题标题】:Ember.js find single item without IDEmber.js 查找没有 ID 的单个项目
【发布时间】:2014-10-05 00:52:55
【问题描述】:

我正在构建一个 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

【问题讨论】:

    标签: ruby-on-rails ember.js ember-data ember-simple-auth


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      然后在 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 为 me1 的空记录和一条带有返回的单个记录的 ID 的完整记录。

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

      【讨论】:

        【解决方案3】:

        Ember 数据有queryRecord 方法。

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

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

        【讨论】:

          【解决方案4】:

          我结合了这两个答案,并使用了 queryRecord 和一个被服务器忽略的参数。

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

          感谢 Binarytales 和 antulik

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-02
            • 1970-01-01
            • 2015-10-05
            • 2011-08-08
            • 2011-03-26
            相关资源
            最近更新 更多