2011-10-10 18 views
7

Bir görünümü var.Omurga olay işleyicisi aracılığıyla olay tetikleyen öğeyi alma

//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 }); 
    }, .... 

Ben elemanı (bir giriş elemanı olan) hangi değişiklik olayı üzerine tetiklendi erişebilir nasıl? Eğer changeInputs üzerinde _.bindAll aradığınız çünkü

cevap

8

bir istisna alıyorsanız. Bunu yaptığınızda, changeInputs'un çağrıldığında nesnenizin içeriğine bağlı olacağını söylüyorsunuz.

Başka bir deyişle, $(this)'a başvurduğunuzda, CreatePollView örneğini jQuery'ye gönderirsiniz;

Bu bağlamayı korumak istiyorsunuz, ancak, modelinize erişiyorsanız (this.model) this, CreatePollView örneğinin olması gerekir.

Bunun yerine, işlevinden bir etkinlik olsun ve kullanabilir target veya diğer bazı bilgi parça: _.bindAll eklendi açıklama için

changeInputs: function(e) { } 
+0

+1 gerçekten ilginç ben bazen yine de bu bağlar ile mücadele "ChangeInputs" yönteminizin içinde – Sander

+2

, gereksinimlerinize bağlı olarak, Brian'ın önerdiği gibi $ (e.currentTarget) veya '$ (e.target)' terimini kullanarak değiştirilen belirli bir öğeyi alabilirsiniz. 'e' bir jquery olayı args nesnesidir, bu yüzden farklılığı anlamak için jquery'nin belgelerini okuyun. –

+0

Teşekkürler @Sander. İyi açıklama. Bunu yapmak için uygun bir yol gibi görünüyor. Bu arada çalışmayı başardım, ama argüman koleksiyonunun nereden geldiğini gerçekten anlamıyorum .... 'un altındaki kodu inceleyin. Girişler: function() { var newVal = arguments [0] .srcElement. değeri; this.model.set ("Konu", {Konu: newVal}); }, – Tom

0
changeInputs: function(e){ 
    //use e.target 
    ... 
} 
İlgili konular