【问题标题】:How to update record locally with Ember-Data and Ember?如何使用 Ember-Data 和 Ember 在本地更新记录?
【发布时间】:2015-07-02 20:29:51
【问题描述】:

我正在构建一个基于聊天的应用程序,它允许用户查看消息历史记录、发送新消息并从最近的用户中进行选择。最近的用户列表按recent_rating 属性排序,该属性是与该用户相关的最后发送/接收消息的日期。 recent_rating 不是数据库中的属性,而是在用户模型中声明的方法。当我第一次使用代码中的以下设置加载页面时,用户被正确排序:

序列化器:

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

导轨型号:

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

Ember 控制器:

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

    ....
});

Ember 模型:

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

但是,当我发送新消息时,我需要更新本地 ember-data 存储中的recent_rating 属性以获取相关用户记录。这反过来会更新最近用户的列表排序。

如何更新 Ember-Data 中记录的属性并避免 API POST 请求?由于recent_rating 在 API 端的数据库中不作为属性存在

谢谢

【问题讨论】:

  • 一个模型在调用 save 之前不应该持续到服务器上,你是如何更新记录的?

标签: ember.js ember-data


【解决方案1】:

有一种技术方法可以满足您的要求 (store#push),但我认为这里的设计有点偏离。

这是我将如何建模。 user 有很多 messagesmessagecreatedAt 属性。然后通过最新消息对用户进行排序就变成了几个简单的计算属性的问题:

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')
});

并在模板中使用该属性。


附:如果可能,您应该开始使用 Ember CLI :)

【讨论】:

  • 感谢您的回复,我的 Ember 知识相当有限,所以这对我很有帮助!我将实施上述解决方案并返回我的结果....至于 ember-cli,使用它有什么好处?还没有太多经验。是否建议将它与 Rails API 一起使用?
  • 将代码编写为模块,等等。试一试:www.ember-cli.com
猜你喜欢
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
相关资源
最近更新 更多