我在/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来帮助说明这一点。
我正在调查 mapBy和 uniq方法并尝试它们但没有成功。
非常感谢任何指示或建议。
最佳答案
我会使用 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/