backbone.js - події, знаючи, на що натиснули


96

В одному з моїх класів перегляду backbone.js у мене є щось на кшталт:

...

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

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

...

тому що моя розмітка на сторінці може мати щось на зразок:

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

То як саме я можу знайти інформацію про елемент, що спричинив подію? Або в даному випадку це було натиснуто?

Відповіді:


132

Зазвичай для прив'язки події ви просто використовуєте $(this), але я впевнений, що Backbone подання налаштовані так, щоб thisзавжди посилатися на представлення, тому спробуйте наступне:

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

ДІЙСНО ПІЗНИЙ РЕДАКТ : Ви, мабуть, хочете використовувати $(ev.currentTarget). Дивіться відповідь на відповідь Pawlik нижче


1
Якщо я маю рацію, це працює з подіями jquery (про те, про що запитував плакат). Однак зверніть увагу, що події, що ініціюються через функцію тригера () магістралі, не несуть цієї інформації (вона натомість надає вам аргументи, що використовуються під час виклику тригера ())
Jens Alm,

1
@roufamatic - адже це дійсно стандартні події JavaScript, тому це поза сферою роботи BackboneJS. Ці документи не містять посилання на HTML або CSS.
skalee

1
"Перегляди хребта налаштовані так, що це завжди стосується подання" - це стосується лише подій, визначених за delegateEvents([events])допомогою eventsоб'єкта, переданого або Backbone.View.extend(для якого використовується колишній метод поза кадром). Це не стосується подій, пов'язаних в ініціалізаторі, методі візуалізації тощо
skalee

98

ev.targetВи можете ввести в оману, вам слід скористатися, ev.currentTargetяк описано на http://www.quirksmode.org/js/events_order.html


2
Приємно знати про це - але схоже, що це не реалізовано в IE - чи jQuery робить нормалізацію, щоб виправити це?
Джеймі Вонг,

2
Схоже, jQuery нормалізує як ev.target як елемент dom, що ініціалізує подію, так і ev.currentTarget як поточний елемент DOM у фазі барботування події api.jquery.com/category/events/event-object
mikermcneil

6
Я просто грав з цим, і для уточнення, ви, напевно, хочете ev.currentTarget. Він нормалізований та безпечний для використання у всіх браузерах, що підтримуються jQuery.
mikermcneil

4
Так, ви хочете використовувати currentTarget замість target. Наприклад, якщо ви прив’яжете посилання, що містить дочірні об’єкти, "<a> <span> текст </a>" ціль може вказувати на <span>, а не на <a>.
Євгеній

Це має бути відповіддю. event.targetотримуєте лише те, на що клацнули.
Lorem

0

Ви можете отримати будь-який атрибут, який хочете. ev працює як this:

perpage: function(ev) {
        console.log($(ev.target).attr('name'));
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.