[英]Ember.js - Filter messages
我在/ messages端點上收到以下JSON響應:
{ "messages": [ { id: 1, sender: 2, receiver: 1, body: "this is a first comment", created_at: "2016-09-05 10:00:00", updated_at: "2016-09-05 10:00:00", user: 2 }, { id: 2, sender: 1, receiver: 2, body: "this is a second comment", created_at: "2016-09-05 11:00:00", updated_at: "2016-09-05 11:00:00", user: 2 }, { id: 3, sender: 3, receiver: 1, body: "this is a first comment", created_at: "2016-09-05 12:00:00", updated_at: "2016-09-05 12:00:00", user: 3 }, { id: 4, sender: 1, receiver: 3, body: "this is a second comment", created_at: "2016-09-05 13:00:00", updated_at: "2016-09-05 13:00:00", user: 3 }, ] }
這些是當前用戶與其他用戶擁有的所有消息。 user
屬性是當前用戶正在與之交談的用戶,無論是接收還是發送。 我需要過濾這些消息並僅獲取每個用戶的最后一條消息。
在此示例中,我將獲得ID為1和3的消息。
繼續前進,我已經設置了路由messages/:user_id
,當轉到該路由時,您可以看到與該特定用戶交換的所有消息。
如果執行過濾器,我需要服務器端,那么在訪問messages/:user_id
路由時,該用戶的所有消息都將被加載到商店中。 然后,當返回到messages
我得到了以前存儲在商店中的所有這些消息。
我舉起了灰燼小提琴來說明這一點。
我一直在研究mapBy和uniq方法,並與他們玩弄沒有成功。
任何方向或建議,不勝感激。
我將使用控制器模型上的觀察器來執行此操作:
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');
},
});
我正在使用update_at字段獲取最近的評論。 將updated_at時間字符串更改為時間戳,並選擇時間戳最高的記錄。
var data={
"messages": [
{
id: 1,
sender: 2,
receiver: 1,
body: "this is a first comment",
created_at: "2016-09-05 10:00:00",
updated_at: "2016-09-05 10:00:00",
user: 2
},
{
id: 2,
sender: 1,
receiver: 2,
body: "this is a second comment",
created_at: "2016-09-05 11:00:00",
updated_at: "2016-09-05 11:00:00",
user: 2
},
{
id: 3,
sender: 3,
receiver: 1,
body: "this is a first comment",
created_at: "2016-09-05 12:00:00",
updated_at: "2016-09-05 12:00:00",
user: 3
},
{
id: 4,
sender: 1,
receiver: 3,
body: "this is a second comment",
created_at: "2016-09-05 13:00:00",
updated_at: "2016-09-05 13:00:00",
user: 3
},
]
}
var latestMessage=data.messages[0];
data.messages.forEach(function(item){
if(new Date(item.updated_at).getTime()/1000 > new Date(latestMessage.updated_at).getTime()/1000){
latestMessage={};
latestMessage=item;
}
});
console.log(latestMessage);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.