backbone.js - neyin tıklandığını bilen olaylar


96

Backbone.js görünüm sınıflarımdan birinde, şöyle bir şey var:

...

events: {
  'click ul#perpage span' : 'perpage'
},

perpage: function() {
  // Access the text of the span that was clicked here
  // Something like: alert($(element).text())
},

...

çünkü sayfa başına işaretlemem şöyle bir şeye sahip olabilir:

<ul id="perpage">
  <li><span>5</span></li>
  <li><span>10</span></li>
</ul>

Peki olaya neden olan unsur hakkında tam olarak nasıl bilgi bulabilirim? Veya bu örnekte tıklandı mı?

Yanıtlar:


132

Normalde bir olay bağlantısında kullanırsınız $(this), ancak Omurga görünümlerinin thisher zaman görünüme atıfta bulunacak şekilde ayarlandığından oldukça eminim , bu yüzden şunu deneyin:

perpage: function(ev) {
   alert($(ev.target).text());
}

GERÇEKTEN GEÇ DÜZENLEME : Muhtemelen kullanmak istiyorsunuz $(ev.currentTarget). Aşağıda Pawlik'in cevabı hakkındaki tartışmaya bakın


1
Eğer haklıysam, bu jquery olaylarında işe yarar (posterden sorulan kişi). Bununla birlikte, omurganın trigger () işlevi aracılığıyla tetiklenen olayların bu bilgiyi taşımadığını unutmayın (bunun yerine size trigger () çağrılırken kullanılan argümanları verir)
Jens Alm

1
@roufamatic - çünkü bunlar gerçekten standart JavaScript etkinlikleri, dolayısıyla BackboneJS'nin kapsamı dışında. Bu dokümanlar da HTML veya CSS referansı içermez.
skalee

1
"Omurga görünümleri, her zaman görünüme atıfta bulunacak şekilde ayarlanır" - bu yalnızca nesneyle delegateEvents([events])veya eventsiletilen nesneyle tanımlanan olaylar için geçerlidir Backbone.View.extend(bu, arka planda eski yöntemi kullanır). Bu, başlatıcı, oluşturma yöntemi vb.
İle

98

ev.targetyanıltıcı olabilir ev.currentTarget, http://www.quirksmode.org/js/events_order.html adresinde açıklandığı gibi kullanmalısınız


2
Bilmekte fayda var - ancak IE'de uygulanmamış gibi görünüyor - veya jQuery bunu düzeltmek için normalleştirme yapıyor mu?
Jamie Wong

2
Görünüşe göre jQuery , olayı başlatan dom öğesi olarak hem ev.target'ı hem de olay köpürme aşamasında api.jquery.com/category/events/event-object
mikermcneil

6
Ben sadece bununla oynuyordum ve açıklığa kavuşturmak için muhtemelen ev.currentTarget'ı istiyorsunuz. Tüm jQuery destekli tarayıcılarda kullanım için normalleştirilmiştir ve güvenlidir.
mikermcneil

4
Evet, target yerine currentTarget kullanmak istiyorsunuz. Örneğin, alt nesneleri içeren bir bağlantıyı bağlarsanız, "<a> <span> metin </a>" hedefi <a> yerine <span> işaret edebilir.
Evgenii

Cevap bu olmalı. event.targetsadece tıklananları alırsın.
Metropolis

0

İstediğiniz herhangi bir özelliği elde edebilirsiniz. ev şu şekilde çalışır this:

perpage: function(ev) {
        console.log($(ev.target).attr('name'));
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.