1

Backbone を使用して初めてのアプリを作成しています。基本的に、2 レベルの深さの順序付けられていないリストがあります。

<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 で、2 つのコレクション ("Drawers" と "Boxes") を作成し、それらに関連付けられたビューを作成しました。私の問題は、第 2 レベルのリスト項目をどのように処理すればよいかわからないことです。

現時点では、ボックス用のバックボーン コレクションが 1 つあり、コレクションに新しいボックスを追加するたびに、各引き出しの下にレンダリングされます。親引き出しに基づいてボックスのグループをどうにかして分離する必要がありますが、「バックボーンの方法」でこれを行う方法がわかりません。

つまり、ボックス 3 とボックス 4 の要素を引き出し 2 に追加する必要があるとします。この 2 つの「ボックス」を「引き出し 2」の下にレンダリングするにはどうすればよいでしょうか。引き出しのボックス グループごとに個別のコレクションを用意する必要がありますか? もしそうなら、バックボーンでこの目的でコレクションを動的に作成するにはどうすればよいですか? 他に方法はありますか?

4

1 に答える 1

2

まず、あなたの説明から、 Drawer はコレクションではなくモデルであるように見えます。Drawer のインスタンスを含む Drawers というコレクションを作成できます。

第二に、これを行う主な方法は 2 つあります。どちらの方法を選択するかは、ボックスと引き出しの関係をより正確に表す方法と、データを効率的に処理できる方法についての判断に任されています。

  1. ボックスのグループが主にその親ドロワーに関連している場合、各ドロワーを初期化して Boxes コレクションを与えると、次のようになります。

    var drawer_set = [];
    
    変数の引数 = {
      ラベル: '引き出し 1',
      ボックス: new Boxes()
    };
    
    drawer_set.push(new Drawer(args));
    
    var drawers = new Drawers(drawer_set);
  2. すべてのボックスで処理をすばやく実行できるようにする場合は、ボックスの 1 つと引き出しの 1 つという 2 つのコレクションが必要です。各ボックスには、どの引き出しにあるかを示す属性があります。

    var args = { 引き出し: 1 };
    var box = new Box(args);
    var ボックス = 新しいボックス (ボックス);

次に、次の方法でボックスごとに引き出しを選択できます。

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