1

我正在尝试将收藏添加到我正在构建的应用程序中。

基本设置涉及拥有“概念”集合的用户。他们可以通过提交文本字段将新概念建议到集合中。

用户还可以通过点击小星星来“收藏”概念,就像在 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#index 很自然地将概念范围仅限于最喜欢的那些。

但是,概念会被ConceptsControllerat破坏"/concepts",如果我尝试在位于集合中的model.destroy()a上调​​用 Backbone,那么它将错误地向.ConceptFavouritedConceptsDELETE"/favourited_concepts"

解决方案可能是只坚持一个概念集合,将favourite布尔属性混搭到每个概念上,并定义一个比较器以强制最喜欢的概念保持在列表的顶部。但是,我觉得这样做会在视图层中失去一些灵活性。我不能拥有监听FavouritedConceps集合中事件的视图。

实现此功能时采取的最佳方法是什么?

4

1 回答 1

0

我会坚持使用带有布尔标志的收藏。这将为您节省所有的内务处理,以确保集合之间的正确状态。

您仍然可以在绑定到来自概念的事件的视图中实现侦听器,您只需要在回调中执行一个 concept.favourite 检入。

于 2012-05-01T19:25:02.577 回答