Ruby on rails 与ember.js概念抗争-大量数据

Ruby on rails 与ember.js概念抗争-大量数据,ruby-on-rails,ember.js,ember-data,active-model-serializers,Ruby On Rails,Ember.js,Ember Data,Active Model Serializers,我正在考虑将Ember.js用于一个新的、支持Rails的应用程序(使用活动模型序列化程序)。我正在努力让我的头脑了解这个框架,所以这可能是一个新手问题 我的数据结构如下(简化): 在一个“活动日”内可以有数千个活动(在一个活动内有几十个参与者及其所有数据) 当我想要获得事件日列表时,我加载了一些JSON,不仅包含事件日,还包含所有事件(以及其中所有内容的所有数据),这似乎是“错误的”。。。基本上,它加载整个树 我认为我可以通过使用自定义序列化程序来解决这个问题,但是,在某个时候我需要获取数据,

我正在考虑将Ember.js用于一个新的、支持Rails的应用程序(使用活动模型序列化程序)。我正在努力让我的头脑了解这个框架,所以这可能是一个新手问题

我的数据结构如下(简化):

在一个“活动日”内可以有数千个活动(在一个活动内有几十个参与者及其所有数据)

当我想要获得事件日列表时,我加载了一些JSON,不仅包含事件日,还包含所有事件(以及其中所有内容的所有数据),这似乎是“错误的”。。。基本上,它加载整个树

我认为我可以通过使用自定义序列化程序来解决这个问题,但是,在某个时候我需要获取数据,而Ember似乎再也不会调用服务器了

因此,如果我加载EventDays并且里面没有事件数据,那么当我点击“show”方法时,Ember永远不会调用服务器来更新EventDay对象

我不知道我在这里说的是否清楚。我希望在这方面比我领先一点的人能够理解我的意图

事实上,我认为可以归结为两个问题:

1) 如何正确过滤请求中的信息,以便只填充本地对象(即,在调用index方法时,我需要一个没有子项的事件日列表,但在调用show方法时,我需要一个包含下一级别的事件日)

2) 如何让余烬在适当的时间“重新加载”对象以填充适当的内容

也许我看错了——忽略了像Ember这样的东西的意义——如果是这样,我欢迎指向适当教程的指针,但我找不到任何东西(即使在Ember网站上)来解释如何一次加载整个树。在海量数据的情况下,这似乎很慢,是一个明确的浏览器杀手,而且完全是错误的

我感谢我的兄弟们帮助我学习

编辑

由于某些原因,我立即被否决,因此我将添加代码:

客户端:

App.EventDay = DS.Model.extend({
  day: DS.attr('date'),
  events: DS.hasMany("Event", {async: true})
});
服务器端:

class EventDaySerializer < ActiveModel::Serializer
  attributes :id, :day
  has_many :events, embed: :ids, key: :events
end
值得注意的是,如果我不在serialiser中使用
key::events
参数,那么返回的结果就是
事件ID:[1,2,3,4]
,您可能认为这是正确的,但会导致Ember看不到事件

另外值得注意的是,如果我这样做:

HorseFeeder.ApplicationSerializer = DS.ActiveModelSerializer.extend({});
那什么都不管用!加载路由时出现
错误:错误:断言失败:来自findAll的响应必须是数组,而不是未定义的


我真的不认为让Ember和Rails的基本连线工作起来应该有这么困难…

您可以告诉Ember数据,关系是异步的

App.EventDay = DS.Model.extend({
  day: DS.attr('date'),
  events: DS.hasMany("Event", {async: true})
});
如果您这样做并获得所有EventDays,您将从服务器端获得EventDays列表。服务器端应该使用事件日中包含的事件ID进行响应,或者您可以提供一个url作为所有事件的链接。在您需要之前,Ember不会加载事件


然后,当您调用某个事件日的show方法并在模板中获取该日的所有事件时,余烬数据将关闭并获取事件的数据。

谢谢。请看我的编辑,看看现在发生了什么。对不起,我忘了rails有自己的命名规则,特别是使用下划线和整个_id/_id的东西。如果继续使用DS.ActiveModelSerializer并从hasMany on EventDaySerializer中删除键:events,它是否有效?一旦我添加DS.ActiveModelSerializer,我就会得到
错误:断言失败:加载路由时出错:错误:断言失败:来自findAll的响应必须是数组,加载索引对象时未定义
HorseFeeder.ApplicationSerializer = DS.ActiveModelSerializer.extend({});
App.EventDay = DS.Model.extend({
  day: DS.attr('date'),
  events: DS.hasMany("Event", {async: true})
});