2011-12-26 23 views
19

Bazı hesapların üzerinde çalışmak istediğim bazı alanları olan bir web sitem var mı? Bir miktar girdim var ve benim backbone.js Görünümünde "change" olayını bu girdiye bağladım.Kullanıcının girdiği verilerin değerini nasıl alabilirim?

Giriş alanındaki değişikliklerin değerini nasıl alabilirim?

Değeri elde etmek için bu yöntemi (aşağıda) buldum, ancak fonksiyonumda öğe kimliğini tekrar bilmem gerektiğinden, yanlış geliyor. Bunu bir sınıfla yapamam, örneğin.

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}); 
    } 

}); 

Ve HTML

:

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

Am bunu doğru yaklaşan? Değiştirilen nesneye erişen bir değişken var mı? Biliyorum ki $ (this.el) öyle değil, sadece konteyner.

cevap

22

jQuery, changeQuantity işlevinize bir event nesnesi gönderir. Bununla birlikte, değiştirilen girişi alabilirsiniz. Eğer geri arama işlevinin argüman olarak getirebilir etkinliğinin, target kullanmak zorunda http://jsfiddle.net/tz3XS/138/

+0

çalıştığını, teşekkür ederiz! Neden hiç bir yerde belgede görmediğimi merak ediyorum. –

+1

aslında, bu omurga olmadığından, tüm omurga işlevi, işlevin işlendikten sonra öğenin olayına bağlanmasıdır. argümanları geri arama işlevine ileten jQuery'dir ve bunun jQuery belgelerinde iyi bir şekilde belgelendiğine eminim. Ancak, bu jQuery'yu referans alan bir satır ekleyerek Belge sayfaları zarar göremez, bunun üzerinde haklısınız. – 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}); 
    } 

}); 

Ben örnek olarak bir jsfiddle yarattı.

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 = yeni pencere (i bize ı window.CalcModel ile ikame model kodu (boş bir modeli) vermediler çünkü kendimi o iş yapmak için bazı kod eklemek vardı). Hesaplamalar ({model: yeni CalcModel(), el: '#myView'});

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

İlgili konular