1

我期待在使用Ember.js一個新的,Rails的支持,應用程序(使用Active模式串行器)。我正在努力爭取讓我的頭腦圍繞框架,所以也許這是一個新手問題。與ember.js概念掙扎 - 大量數據

我的數據結構是這樣的(簡化):

Event Days -- 
    Events -- 
     * Participants 
     * Location 

內的「活動日」可能有數千個事件的(和事件數十個參與者和所有的數據中)。

當我想要獲取事件日期列表時,我加載了一些JSON,它不僅包含EventDays,還包含所有事件(然後是所有事件中的所有數據),這似乎是「錯誤的......」基本上,它裝載整棵樹!

我以爲我可以通過使用自定義序列化的行動解決這個問題,但是,在某些時候我需要得到的數據和灰燼似乎永遠不會再調用服務器。

所以,如果我加載EventDays和根本沒有事件數據裏面灰燼從未調用服務器更新EventDay對象時,我通過點擊一個「秀」的方法。

,如果我是清楚的在這裏,我不知道。我希望有人能夠理解我在駕駛什麼!

真的,我認爲它歸結爲兩個問題:

1)如何正確地過濾掉信息請求,以便只有本地對象填寫(即在調用索引方法,我需要一個列表沒有孩子的活動日,但在呼叫展示方法,我需要一個單一的事件日填補下一級)

2)如何讓灰燼在適當的時間'重新加載'一個對象來填寫適當的內容

也許我在看這個錯誤 - 缺少像灰燼點 - 如果是這樣我WELCO我指出了適當的教程,但我找不到任何東西(甚至在Ember站點上),它解釋了除了一次加載整個樹之外的其他任何事情。有了Gig的數據,這看起來很慢,是一個明確的瀏覽器殺手,而且顯然是錯誤的。

我欣賞我的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的建議我增加了異步屬性和更新上面的串行器的代碼。

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]它,你會覺得是對的,但會導致灰燼不看到事件。

另外值得注意的是,如果我這樣做:

HorseFeeder.ApplicationSerializer = DS.ActiveModelSerializer.extend({}); 

然後沒有什麼作品了!我得到Error while loading route: Error: Assertion Failed: The response from a findAll must be an Array, not undefined

我真的不認爲它應該是這個很難得到灰燼和Rails的基本接線工作...

回答

0

你可以告訴燼數據的關係是異步的。

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

如果您這樣做並獲取所有EventDays,您將從服務器端獲得EventDays的列表。服務器端應該使用事件日中包含的事件的ID進行響應,或者您可以提供一個鏈接到所有事件的URL。 Ember在你需要它們之前不會加載事件。

然後,當您爲事件日和模板中的show方法調用該日期的所有事件時,燼數據將會關閉並獲取事件的數據。

+0

謝謝kertap。查看我的編輯,看看現在會發生什麼。 – phil

+0

對不起,我忘了rails有自己的命名約定,特別是使用下劃線和整個_id/_ids的東西。如果您繼續使用DS.ActiveModelSerializer並刪除鍵:EventDaySerializer上hasMany的事件是否有效? – PaddyDwyer

+0

只要我在DS.ActiveModelSerializer中添加,我就會得到'錯誤:斷言失敗:加載路由時出錯:錯誤:斷言失敗:加載索引對象時,來自findAll的響應必須是數組,而不是未定義的。 – phil