1

問題:

ビュー内で設定されたイベントは、ビューが を使用して別のものに置き換えられ、 を使用$element.html(anotherView)してページに戻された後に発生しません#element.html(theView)

例:

var BuggyView = Backbone.View.extend({
    // Event works the at first, but not after the view is replaced, then added back
    //     onto the page
    events:{
        'click #some-element': 'on_click_some_element'
    },
    // This function gets called before the view is replaced by another view, but
    //     not after it is added back into the page the second time
    on_click_some_element:function(event){
        alert('User clicked "some element"');
    }
});

イベントは、このコードの実行後に機能します。

// Create the new view:
var buggyView = new BuggyView({});
// Add the view to the page
$element.html(buggyView.el);

このコードは、後でビューがページ上で別のものに置き換えられたときに発生します。

$element.html(anotherView.el);

ビューがページに再度追加されると、イベントは機能しなくなります。

$element.html(buggyView.el);
4

2 に答える 2

1

ビューの要素を DOM に設定した後、render を実行します。

$element.html(anotherView.el);
anotherView.render();

$element.html(theView.el);
theView.render();

おそらくあなたの問題は、レンダリングが再度実行されなかったことです。DOM 割り当てを切り替えるだけです。

于 2012-07-24T20:01:55.333 に答える
1

ほとんどの場合、ビューを削除すると、ビューのバインドされたイベントも削除されます。おそらく、イベントを再委任する必要があります。または (jquery) を使用する代わりに。削除使用.detach

于 2012-07-24T20:02:10.417 に答える