2011-10-10 9 views
7

私はビューを持っています。バックボーンイベントハンドラを介してイベントをトリガした要素を取得する方法

//define View 
var CreatePollView = Backbone.View.extend({ 
    events: { 
     "click #addOption": "addOption", 
     "change .dynamicInput": "changeInputs" 
    }, 
    initialize: function() { 
     _.bindAll(this, "render", "addOption", "changeInputs"); 
     this.model.bind('change', this.render); 
    }, 
    changeInputs: function() { 
     var newVal = $(this).val(); // this throws exception in jquery script 
     this.model.set("Subject", { Subject: newVal }); 
    }, .... 

変更イベントがトリガーされた要素(入力要素)にどのようにアクセスできますか?

答えて

8

あなたはchangeInputs_.bindAllを呼び出しているので、あなたは、例外を取得しています。それを行うと、changeInputsが呼び出されるたびにオブジェクトのコンテキストにバインドされるということになります。

つまり、$(this)を参照すると、CreatePollViewのインスタンスがjQueryに送信されますが、それは好きではありません。あなたのモデル(this.model)にアクセスしているため、この結合を維持したい

は、しかし、そうthisCreatePollViewのインスタンスである必要があります。

代わりに、あなたはあなたの機能からイベントを取得し、使用することができますtargetや情報のいくつかの他の作品:_.bindAllの追加説明のため

changeInputs: function(e) { } 
+0

+1本当に面白い、私は時々、まだこれらのバインドと格闘:) – Sander

+2

の 'changeInputs'メソッドの中に、必要に応じてBrianが提案した' $(e.currentTarget) 'や' $(e.target) 'を呼ぶことによって変更された特定の要素を得ることができます。 'e'はjqueryイベントのargsオブジェクトですので、diffを理解するためにjqueryのドキュメントを読んでください。 –

+0

おかげで@サンド。良い説明。それはそれを行う適切な方法のように思えます。一方、私はそれを有効にすることができましたが、引数コレクションはどこから来ているのか分かりません。以下のコードを参照してください。 changeInputs:function(){ var newVal = arguments [0] .srcElement。値; this.model.set( "Subject"、{Subject:newVal}); }、 – Tom

0
changeInputs: function(e){ 
    //use e.target 
    ... 
} 
関連する問題