计算或选择骨干视图实例

时间:2013-12-01 15:12:53

标签: javascript backbone.js view

假设我正在尝试创建一个toDo应用程序,其中单击每个toDo会打开每个toDoItem的编辑表单。我只希望在任何时候最多打开一个编辑表单,所以现在我在toDoItem视图的edit方法中执行此操作:

edit: function (e) {
  e.preventDefault();    
  if ($('.editForm').length == 0)  {
    //create form model and view
  }
}

这有效,但似乎不是非常Backbone-y。是否有办法选择或计算特定视图的所有实例(在本例中为表单视图)?

1 个答案:

答案 0 :(得分:0)

AFAIK,Backbone.View中没有用于计算特定视图实例的实用程序方法。以下是一些想法......

  1. 也许您的每个TODO表单都与模型相关联?在这种情况下,您可以使用model.set / get'eding'和collection.isAlreadyEditing()来过滤此字段上的模型:

    (collection.filter(function(model){return model.get(“editing”)})。length> 0

    这将允许您在更改时使用:在整个视图中编辑事件以控制逻辑并在集合中具有方便的辅助函数,以定义所有这些TODO的整体行为。这将是在Backbone中实现更接近Controller模式的一种方法。

  2. 主干中另一个常见的事情就是在实例化时保留所有子视图的数组,这样你就可以做到:

    _。any(subViews,function(view){return view.editing;})

    假设您在子视图中切换时保留编辑标记。

  3. 您可以让您的视图使用id或模型监听toggleEdit事件或标识正在编辑的内容的某些内容,有时事件处理程序可以像toggleClass一样简单(“open”,model == this .MODEL)...

  4. 我相信还有数以百万计的其他想法。但是计算jQuery所选元素的数量可能不是很高!