1

我正在使用 Backbone 创建我的第一个应用程序。基本上,我有一个两级深的无序列表。

<ul class="cabinet">
  <li class="drawer"> 
    <a>Drawer 1</a>
    <ul class="boxes">
      <li> Box 1 </li>
      <li> Box 2 </li>
    </ul>
  </li>
  <li class="drawer"> 
    <a>Drawer 2</a>
    <ul class="boxes">
      <li> Box 3 </li>
      <li> Box 4 </li>
    </ul>
 </li>
</ul>

在 Backbone 中,我创建了两个集合(“抽屉”和“盒子”)及其关联的视图。我的问题是我不知道应该如何处理二级列表项。

此时,我有一个用于盒子的 Backbone 集合,每次我向集合中添加新的 Box 时,它都会在每个抽屉下呈现。我应该以某种方式根据父抽屉分隔一组盒子,但我不知道如何以“主干方式”做到这一点。

换句话说,假设我需要将 Box 3 和 Box 4 元素添加到 Drawer 2。如何在“Drawer 2”下渲染这两个“box”。我应该为每个抽屉的盒子组单独收集吗?如果是这样,我如何在 Backbone 中动态创建具有此目的的集合?还有其他方法吗?

4

1 回答 1

2

首先,从您的描述来看,Drawer 应该是一个模型,而不是一个集合。您可以有一个名为 Drawers 的集合,其中包含 Drawer 的实例。

其次,有两种主要方法可以做到这一点。您选择哪种方法实际上取决于您的判断,哪种方法更准确地代表了盒子和抽屉之间的关系,哪种方法可以让您有效地处理数据。

  1. If groups of boxes are primarily related to their parent drawer, then, when you initialize each drawer and give it a Boxes collection:

    var drawer_set = [];
    
    var args = {
      label: 'Drawer 1',
      boxes: new Boxes()
    };
    
    drawer_set.push(new Drawer(args));
    
    var drawers = new Drawers(drawer_set);
  2. If you want to be able to quickly run processes on all of your boxes, you would want two collections: one of boxes and one of drawers, where each box has an attribute saying which drawer it's in.

    var args = { drawer: 1 };
    var box = new Box(args);
    var boxes = new Boxes(boxes);

Then, you can select your drawers by box via:

var boxes_in_drawer_1 = boxes.where({drawer: 1});
于 2013-03-11T21:05:10.547 回答