假设我正在尝试创建一个toDo应用程序,其中单击每个toDo会打开每个toDoItem的编辑表单。我只希望在任何时候最多打开一个编辑表单,所以现在我在toDoItem视图的edit方法中执行此操作:
edit: function (e) {
e.preventDefault();
if ($('.editForm').length == 0) {
//create form model and view
}
}
这有效,但似乎不是非常Backbone-y。是否有办法选择或计算特定视图的所有实例(在本例中为表单视图)?
答案 0 :(得分:0)
AFAIK,Backbone.View中没有用于计算特定视图实例的实用程序方法。以下是一些想法......
也许您的每个TODO表单都与模型相关联?在这种情况下,您可以使用model.set / get'eding'和collection.isAlreadyEditing()来过滤此字段上的模型:
(collection.filter(function(model){return model.get(“editing”)})。length> 0
这将允许您在更改时使用:在整个视图中编辑事件以控制逻辑并在集合中具有方便的辅助函数,以定义所有这些TODO的整体行为。这将是在Backbone中实现更接近Controller模式的一种方法。
主干中另一个常见的事情就是在实例化时保留所有子视图的数组,这样你就可以做到:
_。any(subViews,function(view){return view.editing;})
假设您在子视图中切换时保留编辑标记。
您可以让您的视图使用id或模型监听toggleEdit事件或标识正在编辑的内容的某些内容,有时事件处理程序可以像toggleClass一样简单(“open”,model == this .MODEL)...
我相信还有数以百万计的其他想法。但是计算jQuery所选元素的数量可能不是很高!