1

TODOリストアプリの行など、ビュー(コントローラー)のライフサイクルは何ですか?

App.RowView = Backbone.View.extend({
    events:{
        "click #del" : "delRow"
    }
});

ほとんどのチュートリアルでは、AppView はこれを行います。

    render: function()
    {
        this.collection.each(this.renderRow, this);
        return this;
    },
    renderRow: function(row)
    {
        var rowView = new App.RowView({model:element});
        this.$('#rows').append(rowView.render().el);
    }

質問:

  1. rowView一度だけ使用され、に破棄されるということrenderRow()ですか? それとも生き続ける?
  2. true の場合、いつビューを強制終了しますか? ビューにリスナーを追加しmodel.destroyて呼び出すremove()だけで十分ですか?
  3. サーバーからレンダリングされた行のマークアップが既にある場合、click #delイベントは引き続きキャプチャされ、作成されたものなしで何かを行いますrowViewか?
  4. 'click #del'jQueryがそこで動作を委任してアタッチできるように、親ビューに配置する方がよいでしょうか?
  5. 行ごとに1つのrowViewがあるということですか?それは _.template がすべての行でコンパイルされていることを意味しませんか? 代替手段はありますか?
4

1 に答える 1

2
  1. 参照が終了すると、それを指している他の参照がある場合、ビューは残ります
  2. ビューが不要になったとき、通常はビューが表示されなくなったときに、ビューを強制終了します。ビューがイベントをバインドしている場合は、呼び出す前にそれらをアンバインドする必要がありますremove():バックボーンでビューを管理するパターン
  3. RowViewイベントをキャプチャするには、 のインスタンスをインスタンス化する必要があります。
  4. これはあなたが探している動作に依存しますが、あなたの例click #delでは、親ビューでイベントを宣言した場合、各ビューはそれぞれ独自のイベントをキャプチャする必要があると思います。削除する行をどうやって知るのですか?
  5. 通常、View 定義でテンプレートを宣言し、コンパイルされたバージョンを次のthis.templateように割り当てますtemplate: _.template( "hello: <%= name %>" );
于 2012-06-04T18:34:39.623 に答える