簡體   English   中英

Ember.js-過濾消息

[英]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我得到了以前存儲在商店中的所有這些消息。

我舉起了灰燼小提琴來說明這一點。

我一直在研究mapByuniq方法,並與他們玩弄沒有成功。

任何方向或建議,不勝感激。

我將使用控制器模型上的觀察器來執行此操作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM