簡體   English   中英

如何使用Ember-Data和Ember在本地更新記錄?

[英]How to update record locally with Ember-Data and Ember?

我正在構建一個基於聊天的應用程序,該應用程序允許用戶查看消息歷史記錄,發送新消息以及從最近的用戶中選擇。 最近用戶列表按“ recent_rating屬性排序,該屬性是與該用戶相關的最后發送/接收的消息的日期。 recent_rating不是數據庫中的屬性,而是在用戶模型中聲明的方法。 當我第一次加載頁面時,對用戶進行了正確排序,並在代碼中進行了以下設置:

串行:

class UserSerializer < ActiveModel::Serializer
    attributes :id, :email, :name, :recent_rating
end

Rails模型:

    def recent_rating
        Message.where('recipient_id = :user_id OR sender_id = :user_id', user_id: id).last.try(:created_at)
    end

灰燼控制器:

App.ChatsController = Ember.ArrayController.extend(
{
    sortProperties: ['recent_rating'],
    sortAscending: false,

    ....
});

灰燼模型:

App.User = DS.Model.extend(
{
  name: DS.attr('string'),
  email: DS.attr('string'),
  recent_rating: DS.attr('string'),
});

但是,當我發送新消息時,我需要為相關用戶記錄更新本地余燼數據存儲中的recent_rating屬性。 反過來,這將更新最近用戶的列表順序。

如何更新Ember-Data中記錄的屬性並避免API POST請求? 由於recent_rating在API端數據庫中作為屬性不存在

謝謝

有一種技術方法可以完成您要問的事情( store#push ),但是我認為這里的設計有些偏離。

這是我要對此建模的方式。 user有多條messages ,並且一條message具有createdAt屬性。 然后,通過最新消息對用戶進行排序就變成了一些簡單的計算屬性:

App.Message = DS.Model.extend({
  user: DS.belongsTo('user'),
  createdAt: DS.attr('date')
});

App.User = DS.Model.extend({
  messages: DS.hasMany('message'),
  name: DS.attr('string'),
  email: DS.attr('string'),

  messagesSorting: ['createdAt:desc']
  orderedMessages: Ember.computed.sort('messages', 'messagesSorting'),
  latestMessage: Ember.computed.alias('orderedMessages.firstObject')
});

現在,在控制器/組件中(無論顯示用戶如何),您都可以創建一個新的計算屬性來對用戶進行排序:

App.SomeController = Ember.Controller.extend({
  usersSorting: ['latestMessage:desc'],
  sortedUsers: Ember.computed.sort('model', 'usersSorting')
});

並在模板中使用該屬性。


PS,如果可能,您應該開始使用Ember CLI :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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