1

我正在嘗試向我正在構建的應用添加收藏。使用Backbone和Rails實施帶星標的收視系統

基本設置涉及擁有「概念」集合的用戶。他們可以通過提交文本字段向集合中提出新概念。

用戶也可以通過點擊一個小星星來「喜歡」概念,就像在Gmail或其他一百萬個應用程序中一樣。遵從概念應該堅持概念集合的頂部,使新創建的概念出現在概念集合的下面。

爲了最喜歡一個概念,我必須發佈概念的id到"/favourites"

class ConceptView extends Backbone.View 
    events: 
    'click .empty-star' : 'favourite' 

    favourite: -> 
    @model.favourite() 

class Concept extends Backbone.Model 
    favourite: -> 
    $.post("/favourites", { concept_id: @id }, "json") 

我的問題是關於如何在客戶端管理受歡迎和非受歡迎的概念。

我是否應該有兩個單獨的集合,一個用於受歡迎的概念,另一個用於非受歡迎的概念,還是應該嘗試堅持一個集合?

如果我有一個Concept模型在FavouritedConcepts收集

class FavouritedConcepts extends Backbone.Collection 
    url: "/favourited_concetpts" 
    model: Concept 

然後我可以列出通過該集合就好了概念,因爲它是自然的favourited_concepts#索引範圍的概念,只有那些被收藏最多。

然而,概念是通過在ConceptsController破壞"/concepts",如果我嘗試調用骨幹model.destroy()Concept駐留在FavouritedConcepts集合,然後就會誤發送DELETE請求"/favourited_concepts"

解決方案可能只是堅持一個概念集合,將一個favourite布爾屬性混合到每個概念上,並定義一個比較器來強制收藏的概念堅持列表的頂部。但是,通過這樣做,我覺得我的視圖層會失去一些靈活性。我無法收聽來自FavouritedConceps收藏的活動。

執行此功能時採取的最佳方法是什麼?

回答

0

我會堅持一個帶有布爾標誌的集合來支持。這將節省您所有的家務,以確保收集之間的正確狀態。

您仍然可以在與來自Concepts的事件綁定的視圖中實現偵聽器,您只需在回調中執行一個concept.favourite檢查即可。

+0

這是我最終選擇做的。 –