2012-02-04 35 views
0

帮我找管理骨干的观点最好的办法。方法隐藏/显示骨干模型视图

例如,我有一个视图集合MyCollectionView其中包含MyModelView - 集合中每个模型的视图。

而如果我想隐藏/显示页面上某些型号?

现在我下面这样:

  • 使用collection.each为每model
  • 内环路的我称之为模型函数filter一些PARAMS
  • 在这个功能我检查模特属性和调用model.trigger 'hide'model.trigger 'show'
  • 最后在model view我使用this.model.bind 'hide', this.hide, this实际上我使用.hide().show()

这种方式看起来很糟糕...为什么我需要做这个长长的功能和事件链。有没有最简单的方法?

谢谢!

回答

2

您的模型不应该告诉意见他们应该做的 - 他们都应该来表示数据和控制应用程序不应该参加 - 因此无奇不有感觉错了你:)

越优雅的方式将是一个过滤器方法添加到其中将使用下划线的方法来筛选要显示/隐藏,做的好?做其工作的意见MyCollectionView - 采摘哪些车型应该显示。然后使用匹配数组调用一个方法来渲染列表,并将模型数组传递给它,以便它可以渲染匹配模型的视图。

从我创造这样的过滤器,我可以告诉你的经验,这可能是更有效更长的名单中删除整个列表做集级别过滤并再次渲染只有那些符合过滤查询的意见。 jQuery的隐藏/显示可能会带来一点负担 - 尽管这是一个你只有大量数据/视图的问题。

也!乘坐开往到集合中的下划线方法的优势 - 你不需要做collection.each(...你可以做

var matches = collection.filter(function(model) { 
    return /*matching condition*/; 
}); 

(还记得渲染列表,并追加到DOM时使用DocumentFragment的预生成视图列表而不是追加逐一)

+0

非常感谢您的回答。我还有一些额外的问题。为什么所有的逻辑应该在视图内?我有很多关于过滤的陈述。我可以委托他们全部模型?在视图过滤器动作中,只使用'return model.filter(conditions)'。之后,我需要调用我的渲染功能。 新视图的呈现是interestion方法:) – ValeriiVasin 2012-02-04 22:57:15

+0

将过滤方法移动到集合类定义也很有意义。但是因为它是帮助检索数据的一个子集。模型和集合应该存储数据,应该知道数据的有效性等,但不应该操纵它或改变,因为这是控制应用程序流的结构的角色 - 在骨干视图中扮演着这个角色。 – 2012-02-05 01:48:45

+0

作为一个使用过滤作为视图方法而不是集合的例子,当我有一个特殊的ListView类正在处理呈现列表(使用documentFragment,我在那里提到)而没有意识到时,我可以给你一个我的使用项目视图或集合的类型和结构 - 作为一个选项,您可以通过项目视图工厂方法,筛选条件和视图根据用户设置的筛选器决定显示的内容,并负责选择正确的模型从集合中创建视图并渲染 – 2012-02-05 01:52:28