2011-12-26 20 views
19

私はいくつかの計算を実行したいいくつかのフィールドを持つウェブサイトを持っていると言います。私は量入力を持っていて、私のbackbone.jsビューでは、この入力に "change"イベントをバインドしました。ユーザーが入力したデータの値を取得するにはどうすればよいですか?

入力フィールドの変更の値はどのようにして取得できますか?

このメソッド(下記)が値を取得しましたが、私の関数で要素IDをもう一度知る必要があるので間違っています。たとえば、クラスでこれを行うことはできませんでした。

window.Calculations = Backbone.View.extend({ 

    (...) 

    events: { 
     'change input#quantity': 'changeQuantity' 
    }, 


    changeQuantity: function() { 
     var val = $(this.el).find('input#quantity').val(); 
     this.model.set({'quantity': val}); 
    } 

}); 

そしてHTMLで:

<input type="text" id="quantity" value="<%= quantity %>"> 

私はこれを正しく近づいていますか?変更されたオブジェクトにアクセスする変数はありますか?私は$(this.el)がそれではないことを知っています、それはちょうど容器です。

答えて

22

jQueryは、changeQuantityeventオブジェクトを送信します。これで、変更された入力を取得できます。あなたは、コールバック関数の引数として取り込むことができるイベントのtargetを使用する必要がhttp://jsfiddle.net/tz3XS/138/

+0

その作品、ありがとうございます!なぜ私はどこのドキュメンテーションでそれを見ていないのだろうか。 –

+1

実際、これはバックボーンではないため、すべてのバックボーンは、レンダリング後にその要素のイベントに関数をバインドします。コールバック関数に引数を渡すのはjQueryですが、これはjQueryのドキュメントに詳しく書かれています。ただし、これらのjqueryドキュメントページを参照する行を追加することはできません。 – Sander

0

window.Calculations = Backbone.View.extend({ 

    //(...) 

    events: { 
     'change input#quantity': 'changeQuantity' 
    }, 


    changeQuantity: function(e) { 
     var val = $(e.currentTarget).val(); 
     this.model.set({'quantity': val}); 
    } 

}); 

は私が一例としてjsfiddleを作成しました。 は

window.CalcModel = Backbone.Model.extend({}); 

window.Calculations = Backbone.View.extend({ 

    events: { 
     'change input#quantity': 'changeQuantity' 
    }, 

    initialize: function() { 

    }, 

    changeQuantity: function(evt) { 
     var val = $(evt.target).val(); 
     this.model.set({'quantity': val}); 
     $(this.el).find('#result').text('new value = ' + val); 
    }, 

    render: function() { 

    } 

}); 

するvar C =新しいウィンドウを(私はあなたが私たちに私はwindow.CalcModelでそれを置換モデルコード(空のモデル)を得なかったので、自分はそれを動作させるためにいくつかのコードを追加する必要がありました)。計算({モデル:新しいCalcModel()、el: '#myView'});

http://jsfiddle.net/saelfaer/uxHLL/

関連する問題