javascript - Ember.js - 过滤消息

标签 javascript ember.js ember-data

我在/messages 端点上收到以下 JSON 响应:

{ “消息”:[ { 编号: 1, 发件人:2, 接收器: 1, body:“这是第一条评论”, 创建时间:“2016-09-05 10:00:00”, 更新时间:“2016-09-05 10:00:00”, 用户:2 }, { 编号: 2, 发件人: 1, 接收器:2个, body: "这是第二条评论", 创建时间:“2016-09-05 11:00:00”, 更新时间:“2016-09-05 11:00:00”, 用户:2 }, { 编号: 3, 发件人: 3, 接收器: 1, body:“这是第一条评论”, 创建时间:“2016-09-05 12:00:00”, 更新时间:“2016-09-05 12:00:00”, 用户:3 }, { 编号: 4, 发件人: 1, 接收器:3个, body: "这是第二条评论", 创建时间:“2016-09-05 13:00:00”, 更新时间:“2016-09-05 13:00:00”, 用户:3 }, ] }

这些是当前用户与其他用户的所有消息。 user 属性是当前用户正在与其进行对话的用户,无论是接收还是发送。我需要过滤这些消息并仅获取每个用户的最后一条消息。

在此示例中,我将得到 ID 为 1 和 3 的消息。

接下来,我已经设置了路由 messages/:user_id,当转到此路由时,您可以看到与该特定用户交换的所有消息。

如果进行过滤,我需要服务器端,那么当访问 messages/:user_id 路由时,该用户的所有消息都将加载到存储中。然后,当返回到 messages 时,我会收到之前在商店中加载的所有这些消息。

我已经发布了 Ember Twiddle来帮助说明这一点。

我正在调查 mapByuniq方法并尝试它们但没有成功。

非常感谢任何指示或建议。

最佳答案

我会使用 Controller 模型上的观察者来做到这一点:

export default Ember.Controller.extend({
  appName: 'Ember Twiddle',
  messages: Ember.computed('model', function () {
    return this.get('model').sortBy('created_at').reverse().uniqBy('user');
  }),
});

如果您需要使用中间状态,您还可以将计算属性链接在一起:

export default Ember.Controller.extend({
  appName: 'Ember Twiddle',
  sorting: ['created_at:desc'],
  sortedModel: Ember.computed.sort('model', 'sorting'),
  uniqModel: Ember.computed.uniqBy('sortedModel', 'user'),
});

您还可以在路由中进行此过滤:

// routes/application.js
export default Ember.Route.extend({
  model() {
    return messages.sortBy('created_at').reverse().uniqBy('user');
  },
});

关于javascript - Ember.js - 过滤消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39697981/

相关文章:

javascript - 使用多个 JSON Api URL

php - 如何创建安全的 php 和 javascript api

ember.js - 在 Ember CLI 中使用 History API 时损坏的 SVG 过滤器 ID 链接

javascript - 如何将字符串转换为二维数组?

javascript - 带液体火焰的 Ember 加载模板

mysql - Ember 数据路由/映射到 MySQL 数据库

ember.js - 在 ember 数据中建模没有 id 的对象

Ember.js数据如何清除数据存储

javascript - 无法动态创建和附加 div 和 span

javascript - Amcharts 标题重叠