gpt4 book ai didi

ruby-on-rails - 通知 ember-data 有关服务器更改的信息

转载 作者:行者123 更新时间:2023-12-04 15:34:09 26 4
gpt4 key购买 nike

我目前正在计划一个使用 ruby​​ on rails 和 ember.js 的复杂应用程序。到目前为止,我所看到的关于 ember-data 的内容是它会自动缓存记录; post.comments将首先导致 Ajax 调用以获取给定帖子的所有评论,但如果用户下次访问相同的路由,它只会从存储缓存中获取记录。

问题是:如果另一个用户对这篇文章发表了评论怎么办?如何告诉 ember 它必须重新加载缓存,因为某些事情发生了变化?

我已经考虑过使用 websockets 告诉客户端要重新加载哪些内容的解决方案 - 但我认为这不是最佳实践。此外,我无法想象这不是一个常见问题,所以我想知道其他开发人员正在做什么来解决这个问题。

最佳答案

我尝试在(实验性)聊天应用程序中实现模型更新。我用过 SSE :ActionController::Live在服务器端(Ruby on Rails)和 EventSource在客户端。

简化代码:

App.MessagesRoute = Ember.Route.extend({
activate: function() {
if (! this.eventSource) {
this.eventSource = new EventSource('/messages/events');

var self = this;
this.eventSource.addEventListener('message', function(e) {
var data = $.parseJSON(e.data);
if (data.id != self.controllerFor('messages').get('savedId')) {
self.store.createRecord('message', data);
}
});
}
}
});

App.MessagesController = Ember.ArrayController.extend({
actions: {
create: function() {
var data = this.getProperties('body');
var message = this.store.createRecord('message', data);
var self = this;
message.save().then(function (response) {
self.set('savedId', response.id);
});
}
}
});

逻辑很简单:我从 EventSource 获取每条新记录。然后,如果记录是由另一个客户端创建的,应用程序会检测到它并使用 ember-data 将新记录添加到存储中。的 createRecord .假设这个逻辑可能有一些警告,但至少它可以很好地作为“概念证明”。聊天正在工作。

此处提供完整来源: https://github.com/denispeplin/ember-chat/

关于重载,我有话要说:您可能不想执行完全重载,这是一种消耗资源的操作。尽管如此,您的客户端仍需要某种方式来了解新记录。因此,通过 SSE 一个一个地获取新记录可能是最好的选择。

关于ruby-on-rails - 通知 ember-data 有关服务器更改的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23740874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com