0

jQuery UI のボタンを使用する単純なバックボーン ビューがあります。

たとえば、モデル(およびビュー)を削除する削除ボタンがあります。以下を使用して、render メソッドのビューにボタンを追加することができました。

var self = this;
$(this.el).find("#deleteButton").button({text : false});
$(this.el).find("#deleteButton").bind( "click", self.deleteView);

そして、ビューに対応するメソッドがあります:

deleteView: function(){
    console.log(this.model);
}

「deleteView」メソッドが呼び出されますが、「this」はビューではなくボタンを参照しているため、「undefined」がコンソールに出力されます。「this」を「self」に置き換えても機能しません。また、モデルまたはビューを引数としてメソッドに渡すと、引数がクリック イベントになるため、機能しないようです。

このようなコールバックをバックボーンで処理する正しい方法は何ですか?

4

2 に答える 2

1

関数が jQuery イベントとしてバインドされると、関数のコンテキストが変化します。

selfまたはを使用する別の関数を使用しますjQuery.proxy
コンテキストを維持する例$.proxy: http://jsfiddle.net/bAeQZ/

var self = {
    deleteView: function(){console.log(this.model)},
    model: '...some model...'
};
$(document).click($.proxy(self.deleteView, self));​
// Alternative without $.proxy:
$(document).click(function(){self.deleteView();});​
于 2012-06-20T09:40:21.827 に答える
1

backbone.view代わりに events プロパティを使用することをお勧めします。これは、レンダリング中に jQuery を手動で使用してイベントを子要素にバインドする方法ではなく、推奨される方法です。 http://documentcloud.github.com/backbone/#View-delegateEvents

これをビューに追加するのと同じくらい簡単です:

events: {
    "click #deleteButton": "deleteView",

  },
于 2012-06-20T09:47:13.757 に答える