Backbone.js 和层次结构/树

标签 backbone.js

我正在开发一个需要一个表单的应用程序,该表单允许用户管理任意深度的产品类别层次结构。我可以很容易地将数据放到页面上,但我有点不知道我需要做什么才能使这样的事情与backbone.js一起工作。基本上,我正在寻找嵌套的 UL。当用户选择一个时,我希望他们能够编辑/删除该类别或在其下添加另一个类别。

我无法在线查找某人在backbone.js 中具有任意深层次的相同数据类型的案例。我会让我的模型类包含我的集合类的一个实例吗?储蓄将如何实现?我知道这是一个广泛的问题,但我主要需要一些关于如何解决这个问题的一般性建议(或者更好的是,我还没有看过某个地方的样本)。

最佳答案

您可以将树建模为具有父子链接的项目集合。所以你的模型应该是这样的:

      id:           id,
      parent_id:    parent_id 

然后使用 JS 中的递归函数调用从集合中构建一棵树。这是一段实时代码:
 function buildTree(branch, list) {
  //recursively builds tree from list with parent-child dependencies
  if (typeof branch == 'undefined') return null;
  var tree = [];
  for(var i=0; i<branch.length; i++)      
    tree.push( {
      item: branch[i],
      children: buildTree( list[ branch[i].id ], list)
    });
  return tree;
}

在使用underscore.js(无论如何这是backbone.js的先决条件)通过parent_id调用函数组项之前,然后调用:
  var list = _.groupBy(arrayOfItems,'parent_id');
  var tree = buildTree(list[0],list); 

最后,再次使用递归函数调用渲染树(此处没有示例,但我相信您明白了)。

附注。如果您指出正确的 parent_id,添加/保存项目应该不会成为问题。

关于Backbone.js 和层次结构/树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682805/

相关文章:

javascript - 当监听器已附加到 Backbone.Model 事件时获得通知

javascript - 如何将 Backbone 集合排序为多个集合进行渲染?

javascript - 为什么我的主干模型奇怪地嵌套在集合中,需要深入访问方法/属性?

javascript - Marionette "Uncaught TypeError: Object [object Object] has no method ' 渲染'",带有 ItemView

backbone.js - 用于 Backbone 应用程序的 Google Analytics 事件跟踪的在线资源

javascript - Jquery 选择在 Backbone 中的模板元素中不起作用

javascript - Backbone subview 和事件解除绑定(bind)

javascript - 具有 Marionette View 的主干关系示例

javascript - backbone.js IE8 appendChild() 错误

javascript - 让客户端创建用户但在通过身份验证之前不修改