1

私は backbone.js を初めて使用し、何かを理解しようとしています。現在、次のオブジェクトがあります:
TodoItem モデル
TodoItemView ビュー
TodoCollection コレクション

TodoItems の束を TodoCollection に追加します。これにより、それぞれに TodoItemViews が作成されます。これにより、todo アイテムの基本的なリストがレンダリングされます。ここで、todo アイテムをクリックすると、その todo アイテムのすべてのデータがフォーム (つまり、編集可能) と [保存] ボタンで表示される新しいタブが開きます。

これをモデル化する方法を見つけようとしています.. TodoItemView に次のクリックイベントがある場合:

  1. タブを開いてすべての情報を入力し、その新しいタブからのイベントをそのタブ内の関数に何らかの方法でバインドしますか? (ほぼ確実に間違っています)
  2. レンダリングが新しいタブを開く新しい EditableTodoItemView を作成し、TodoItemView をクリックして新しい EditableTodoItemView を作成し、それを忘れます (より良いと思います)。

EditableTodoItemView は元のモデルを参照する必要がある、つまり、TodoItem は EditableTodoItemView と TodoItemView の間で共有される必要があると想定しています。新しいコレクションを作成する必要はありません。ユーザーが保存を押すと、EditableTodoItemView は backbone.sync() を呼び出します。

同様に、新しい TodoItem を作成するときに、それを TodoCollection にプッシュすると、その TodoItemView が作成され、項目が新しい (つまり、既定のデータがある) 場合は、EditableTodoItemView が自動的に作成される可能性があります。

これは理にかなっていますか?他に考えるべきことはありますか?

4

1 に答える 1

0

複数のビューを切り替える最も簡単な方法は、Backbone.Router. 次のように使用できます。

var TodoRouter = Backbone.Router.extend({
  routes: {
    "edit/:id":  "edit",   // matches http://yourapp.com/#edit/1234
    ".*":        "index",  // matches http://yourapp.com/#everything-else
  },

  edit: function(id) {
    item = TodoCollection.get(id);
    this.view = EditableTodoItemView({model: item});
    $("#main").html(this.view.render().el);
  },

  index: function() {
    //...
  }

});

次にwindow.router = new TodoRouter; Backbone.history.start();、アプリケーションを起動した場所で実行します。これを実行する前に、TodoCollection が取得されていることを確認してください。使用できます TodoCollection.bind("reset", _.once(function(){Backbone.history.start()}));

于 2012-02-06T19:26:16.750 に答える