我正在考虑将 Ember.js 用于新的 Rails 支持的应用程序(使用 Active Model Serializers)。我正在努力理解这个框架,所以这可能是一个新手问题。
我的数据结构是这样的(简化):
Event Days --
Events --
* Participants
* Location
在“活动日”内可能有数千个活动(在一个活动内有数十名参与者及其所有数据)。
似乎“错误”的是,当我想获取事件日列表时,我加载了一些 JSON,其中不仅包含 EventDays,还包含所有事件(然后是其中所有内容的所有数据)......基本上,它会加载整棵树!
我认为我可以通过对操作使用自定义序列化程序来解决这个问题,但是,在某些时候我需要获取数据,而 Ember 似乎再也不会调用服务器了。
因此,如果我加载 EventDays 并且其中没有事件数据,则当我单击“显示”方法时,Ember 永远不会调用服务器来更新 EventDay 对象。
我不知道我在这里是否清楚。我希望在这方面领先于我的人能够理解我在做什么!
真的,我认为它归结为2个问题:
1)如何正确过滤请求信息,以便只填写本地对象(即在调用索引方法时我需要一个没有孩子的事件日列表,但在调用显示方法时我需要一个活动日充满了下一个级别)
2) 如何让 Ember 在适当的时候“重新加载”一个对象以填写适当的内容
也许我看错了 - 错过了像 Ember 这样的东西 - 如果是这样,我欢迎指向适当教程的指针,但我找不到任何东西(即使在 Ember 网站上)解释除了加载整个文件之外如何做任何事情一下子树。使用 Gigs 数据,这似乎很慢,绝对是浏览器杀手,而且完全是错误的。
感谢 StackOverflow 兄弟帮助我学习!
编辑
由于某种原因我立即被否决了,我将添加代码:
客户端:
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
编辑 2
在 kertap 的建议之后,我添加了 async 属性并更新了上面的序列化程序代码。
json在这里:
{"event_day":
{"id":2,
"day":"2013-12-05",
"events":[1,2,3,4,5,6,7,8]
}
}
值得注意的是,如果我不使用key: :events
序列化程序中的参数,事情会返回为"event_ids": [1,2,3,4]
which,您会认为是正确的,但会导致 Ember 看不到事件。
另外值得注意的是,如果我这样做:
HorseFeeder.ApplicationSerializer = DS.ActiveModelSerializer.extend({});
然后什么都不起作用!我明白了Error while loading route: Error: Assertion Failed: The response from a findAll must be an Array, not undefined
我真的不认为让 Ember 和 Rails 的基本接线工作起来这么难......