【问题标题】:Ember - Fetching live records with meta informationEmber - 使用元信息获取实时记录
【发布时间】:2016-06-10 10:58:57
【问题描述】:

我创建了一个评论模型并尝试获取所有 cmets 记录。但我需要一个元信息 total cmets,它作为 cmets 数组之外的单独属性获取。

我正在使用 Ember store.query 从休息服务中获取记录(我尝试了 store.findAll,但它在承诺响应中只给了我记录的 cmets 数组. 可以修改吗?)。我在使用 store.query() 时得到具有总 cmets(meta) 的记录,但是该记录数组在我们保存新记录时没有得到更新

经过一些分析,我发现我们可以使用过滤器来加载实时记录,但是过滤器现在在 Ember(Ember 2.5.1)中已弃用。从文档中可以清楚地看到,我们可以使用 ember-data-filter 来加载实时记录。但我对使用该插件感到困惑(提到它有一些内存泄漏问题)并且不确定我是否会从响应中获取元信息。有没有其他方法可以从响应中获取带有元信息的实时记录。

请大家提出解决方案

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    在做了一些分析之后,我找到了使用 store.findAll() 访问元数据的解决方案。我们可以在 findAll 响应中使用 typeMapFor 来获取响应中的元信息

    store.typeMapFor(response.type)
    

    完整代码如下,

    store.findAll("comment").then(function(response) {
        var meta = store.typeMapFor(response.type);
    
        // your meta info will be in meta.metadata
        // var totalComments = meta.metadata.totalComments;
    });
    

    响应记录数组是 liveRecords,如果我们保存新记录,它将自动更新。

    store.query("comment").then(function(response) {
        var meta = response.get("meta");
        // We will get meta like this but reponse record array is not a liveRecords
    });
    

    从 store.query() 得到的响应只是一个记录数组(不是 liveRecords),不会用新记录更新

    【讨论】:

      【解决方案2】:

      如果您想要在填充新记录时更新的所有记录的数组,您可以使用peekAll,它返回一个实时记录数组。

      添加代码示例:

      loadRecords: function (){
          this.set('allComments', store.peekAll('comment'));
          this.store.findAll('comment');
      },
      
      recordCount: Ember.computed.alias('allComments.length')
      

      【讨论】:

      • 但是 peek all 不会发出任何网络请求。它只会从数据存储中获取数据。我目前所做的是使用 store.query 从 rest 服务获取数据并填充数据存储,然后使用 peekAll 获取实时记录。但我不确定这是否是正确的方法。
      • @ManuBenjamin 这不会访问元数据(这是您的问题),但它是实时记录数组的一个示例,当您从服务器加载更多时,它会显示商店中当前的 cmets 数量.
      • 我不会在单个查询中获取所有记录,但我将获取数据库中存在的总记录作为元信息作为休息响应。所以我需要的是 db 中的 cmets 总数,而不是 store 中 cmets 的数量。
      • 就我个人而言,我可能只是将它作为一个单独的请求来获取有关数据的信息。但是您的问题是如何访问元数据,看起来您可以访问(非常整洁)。
      • 是的 @averydev..我们可以使用 store.typeMapFor 从查找所有响应中获取元数据。最初我没有找到这个解决方案。有些人推荐使用 store.query,在使用后我得到了元数据(respose.get('meta')),但记录返回不是我们从 findAll 获得的实时记录。我猜你有我的问题。
      猜你喜欢
      • 2016-10-05
      • 2013-01-08
      • 2011-07-06
      • 1970-01-01
      • 2011-11-23
      • 2014-01-09
      • 2015-11-03
      • 1970-01-01
      • 2015-11-11
      相关资源
      最近更新 更多