计数或选择主干视图实例

Count or Select Backbone View Instances

本文关键字:视图 实例 选择      更新时间:2023-12-30

假设我正在尝试创建一个toDo应用程序,单击每个toDo会为每个toDoItem打开一个编辑表单。我一次最多只想打开一个编辑表单,所以现在我用toDoItem视图的编辑方法来做这件事:

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

这行得通,但看起来不太地道。有没有办法选择或统计特定视图(在本例中为表单视图)的所有实例?

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

  1. 也许你的每一个TODO表单都与一个模型绑定在一起?在这种情况下,您可以有一个model.set/get"editing"和一个collection.isAlreadyEdit(),它将过滤此字段上的模型:

    (collection.filter(函数(模型){return model.get("编辑")}).length>0

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

  2. 主干网中另一个常见的事情是,当你安装所有子视图时,保留它们的数组,所以你可以只做一个:

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

    假设在切换子视图时,在子视图中保留一个编辑标志。

  3. 你可以让你的视图监听一个toggleEdit事件,该事件带有id或模型或标识正在编辑的内容的东西,有时事件处理程序可以像toggleClass("open",model==this.model)一样简单…

我相信还有数以百万计的其他想法。但是计算jQuery选择的元素在列表中可能不是很高!