我正在尝试为我正在构建的应用添加偏好。
基本设置涉及拥有“概念”集合的用户。他们可以通过提交文本字段向集合中提出新概念。
用户还可以点击一个小星星来“喜欢”这个概念,就像你在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自然地将概念范围仅限于那些受欢迎的概念。
然而,ConceptsController
"/concepts"
会破坏概念,如果我尝试在位于model.destroy()
集合中的Concept
上调用Backbone的FavouritedConcepts
然后它会错误地向DELETE
发送"/favourited_concepts"
请求。
解决方案可能只是坚持一个概念集合,将favourite
布尔属性混合到每个概念上,并定义一个比较器以强制有利的概念坚持到列表的顶部。但是,通过这样做,我觉得我的视图层会失去一些灵活性。我无法拥有从FavouritedConceps
集合中收听事件的观点。
实施此功能时,最佳方法是什么?
答案 0 :(得分:0)
我会坚持使用一个带有布尔标志的集合来支持。这将为您节省所有内务管理,以确保收藏品之间的正确状态。
您仍然可以在绑定到Concepts的事件的视图中实现侦听器,您只需要在回调中执行concept.favourite检查。