1

このコードが問題を理解するのに十分であることを願っています。
問題は次のとおりです。

1) myView を初めてロードします。2
) をクリックするdiv#myIdと、期待どおりに関数myActionが 1 回だけトリガーされます。
3)別のビューのメソッドremoveを呼び出すと、関数は 2 回トリガーされます。 4) 次に、ステップ 3) を繰り返すと、機能が 3 回トリガーされます。renderingmyAction
myAction

何が問題なのですか?

var myView = Backbone.View.extend({

    // The DOM events specific to an item.
    events: {
        "click #myId" : "myAction"
    },

    myAction: function () {
        // some code
    },

    remove: function remove () 
    {
        $(this.el).html("");
    }

});

PS:
各 render 呼び出しに対して作成される DOM は問題ありません。

4

1 に答える 1

1

通常、ここでの問題は、ビューを適切に破棄せずに、事前に定義された要素に対してビューを何度も再レンダリングしている状態にあり、結果として「ゾンビ」ビューになることです。ビューでを定義し、そのelビューをレンダリングし続けると、イベントが複製されることになります。

これを数回行う場合の例としてjQueryで:

$(document).bind('click',function(){ console.log("document.click"); });
$(document).bind('click',function(){ console.log("document.click"); });
$(document).bind('click',function(){ console.log("document.click"); });

イベントを 3 回発生させます。

ビューを初期化する方法と、最も重要なこととして、それらをレンダリング/再レンダリングする方法をよく見てください。

remove メソッドでしなければならないことは、これらの線に沿ったものです

remove: function remove () 
{
    this.$el.remove();
    this.$el.unbind();
}
于 2012-05-15T21:27:46.380 に答える