[英]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.