backbone.js - sự kiện, biết những gì đã được nhấp


96

Trong một trong các lớp xem backbone.js của tôi, tôi có một cái gì đó như:

...

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

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

...

vì đánh dấu trên mỗi trang của tôi có thể có những thứ như:

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

Vậy làm cách nào để có thể tìm thông tin chính xác về yếu tố đã gây ra sự kiện? Hoặc trong trường hợp này, nó đã được nhấp vào?

Câu trả lời:


132

Thông thường trên một liên kết sự kiện, bạn sẽ chỉ sử dụng $(this), nhưng tôi khá chắc chắn rằng các chế độ xem Backbone được thiết lập để thisluôn tham chiếu đến chế độ xem, vì vậy hãy thử điều này:

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

REALLY LATE EDIT : Bạn có thể muốn sử dụng $(ev.currentTarget). Xem bộ gõ trên câu trả lời của pawlik bên dưới


1
Nếu tôi chính xác, điều này hoạt động với các sự kiện jquery (người mà người đăng đã hỏi). Tuy nhiên, lưu ý rằng các sự kiện được kích hoạt thông qua hàm trigger () của backbone không mang thông tin này (thay vào đó, nó cung cấp cho bạn các đối số được sử dụng khi gọi trigger ())
Jens Alm

1
@roufamatic - vì đó thực sự là các sự kiện JavaScript chuẩn, nên nó nằm ngoài phạm vi của BackboneJS. Những tài liệu đó không bao gồm tham chiếu của HTML cũng như CSS.
skalee

1
"Các khung nhìn xương sống được thiết lập để điều này luôn tham chiếu đến khung nhìn" - điều này chỉ áp dụng cho các sự kiện được xác định với delegateEvents([events])hoặc với eventsđối tượng được truyền tới Backbone.View.extend(sử dụng phương thức cũ đằng sau hậu trường). Điều này không áp dụng đối với các sự kiện ràng buộc trong initializer, làm cho phương pháp, vv
skalee

98

ev.targetcó thể gây hiểu lầm, bạn nên sử dụng ev.currentTargetnhư được mô tả trên http://www.quirksmode.org/js/events_order.html


2
Điều tốt để biết về - nhưng có vẻ như nó không được triển khai trong IE - hoặc jQuery có thực hiện chuẩn hóa để khắc phục điều này?
Jamie Wong

2
Trông giống như jQuery lại bình thường cả ev.target là yếu tố dom khởi tạo sự kiện và ev.currentTarget như phần tử DOM hiện trong sự kiện giai đoạn bọt api.jquery.com/category/events/event-object
mikermcneil

6
Tôi chỉ đang chơi với cái này, và để làm rõ, bạn có thể muốn ev.currentTarget. Nó được chuẩn hóa và an toàn để sử dụng trong tất cả các trình duyệt hỗ trợ jQuery.
mikermcneil

4
Có, bạn muốn sử dụng currentTarget thay vì target. Ví dụ: nếu bạn liên kết một liên kết có chứa các đối tượng con, mục tiêu "<a> <span> text </a>" có thể trỏ đến <span> chứ không phải <a>.
Evgenii 21/02/12

Đây nên là câu trả lời. event.targetchỉ cho bạn những gì được nhấp vào.
Lorem

0

Bạn có thể lấy bất kỳ thuộc tính nào bạn muốn. ev hoạt động như this:

perpage: function(ev) {
        console.log($(ev.target).attr('name'));
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.