计算或选择主干视图实例

Posted

技术标签:

【中文标题】计算或选择主干视图实例【英文标题】:Count or Select Backbone View Instances 【发布时间】:2013-12-01 15:12:52 【问题描述】:

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

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

这行得通,但似乎不是很骨干。有没有办法选择或计算特定视图的所有实例(在本例中为表单视图)?

【问题讨论】:

【参考方案1】:

AFAIK,Backbone.View 中没有实用程序方法来计算特定视图的实例。这里有一些想法......

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

    (collection.filter(function(model) return model.get("editing") ).length > 0

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

    骨干网中另一个常见的事情是在实例化它们时保留所有子视图的数组,所以你可以这样做:

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

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

    您可以让您的视图使用 id 或模型或其他标识正在编辑的内容来监听 toggleEdit 事件,有时事件处理程序可以像 toggleClass("open", model==this .model)...

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

【讨论】:

以上是关于计算或选择主干视图实例的主要内容,如果未能解决你的问题,请参考以下文章

为父级调用渲染的主干子视图

当我只知道主干中的视图时创建视图模型?

主干和引导日期选择器

d3 数据项作为主干视图

具有相同模型的主干多个视图

车把或主干将空字符串插入 html