Rails を利用した新しいアプリ (Active Model Serializers を使用) に Ember.js を使用することを検討しています。フレームワークについて頭を悩ませているので、これは少し初心者の質問かもしれません。
私のデータ構造は次のようなものです(簡略化):
Event Days --
Events --
* Participants
* Location
「イベント日」内には、何千ものイベントが存在する可能性があります (イベント内には、数十人の参加者とそのすべてのデータがあります)。
イベント日のリストを取得したいときに、EventDays だけでなくすべてのイベント (およびそこにあるすべてのデータ) を含む JSON をロードするのは「間違っている」ようです...基本的に、それはロードされます木全体!
アクションにカスタムシリアライザーを使用することでこの問題を解決できると思いましたが、ある時点でデータを取得する必要があり、Ember はサーバーを再度呼び出すことはないようです。
そのため、EventDays をロードし、その中にイベント データがない場合、「show」メソッドをクリックしても、Ember がサーバーを呼び出して EventDay オブジェクトを更新することはありません。
ここではっきりしているのかどうかわかりません。この点で私より少し先を行っている人が、私が運転していることを理解してくれることを願っています!
本当に私はそれが2つの質問に要約されると思います:
1) リクエストに関する情報を適切に除外して、ローカル オブジェクトのみが入力されるようにする方法 (つまり、index メソッドの呼び出しでは、子のないイベント日のリストが必要ですが、show メソッドの呼び出しでは、単一のオブジェクトが必要です)次のレベルダウンで満たされたイベント日)
2) Ember が適切なタイミングでオブジェクトを「リロード」して、適切なコンテンツを埋める方法
たぶん、私はこれを間違って見ています-Emberのようなもののポイントを見逃しています-もしそうなら、適切なチュートリアルへのポインタを歓迎しますが、全体をロードする以外の方法を説明するものは(Emberサイトでも)見つかりません一気に木。ギグのデータを使用すると、これは遅く、明らかにブラウザーキラーであり、まったく間違っているように見えます.
学ぶのを手伝ってくれた 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]
と、正しいと思うかもしれませんが、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 の基本的な配線を機能させるのは、これほど難しいことではないと思います...