Tôi cần phải liên kết hai sự kiện trong backbone.js
-view để chuyển đổi menu. Ý tưởng là nếu một nút có id #toggler
được nhấp vào trình đơn ứng dụng và bất kỳ nhấp chuột nào bên ngoài phần tử #menu
sẽ ẩn menu.Nhấp chuột ràng buộc sự kiện với backbone.js & jQuery
Thật không may tôi không thể làm việc này với sự kiện ràng buộc của xương sống mà không có số outsideMenuHandler()
được gọi cho mỗi nhấp chuột bất kể tôi có nhấp vào thành phần #menu
hay không.
Tôi nên thay đổi điều gì để thực hiện công việc này?
Đây là những gì tôi đã làm trong backbone.js, mà không làm việc như mong đợi:
myView = Backbone.View.extend({
events: {
'click #menu': 'insideMenuHandler',
'click': 'outsideMenuHandler'
}
insideMenuHandler: function(e) {}, // Called when clicking #menu
outsideMenuHandler: function(e) {} // Called on every click both on and off #menu
}
Cũng giống như một tài liệu tham khảo, đây là những gì tôi sẽ làm bằng jQuery một mình:
$(document).click(function(event) {
if ($(event.target).closest('#menu').get(0) == null) {
$("#menu").slideUp();
}
});
Cảm ơn rất nhiều cho câu trả lời của bạn. Rất được đánh giá cao! Một câu hỏi nhanh - như tôi hiểu, cho phép một sự kiện nhấp chuột trả về 'false' sẽ ngăn chặn bất kỳ" sự kiện mặc định "nào xảy ra, có nghĩa là tất cả các nhấp chuột khác sẽ bị tắt khi' externalMenuHandler' trả về 'false'. Tôi có gặp rắc rối không nếu tôi để 'externalMenuHandler' trả về' true' sau khi thực hiện logic của mình (ẩn menu của tôi)? – Industrial
@Industrial: Bạn sẽ kết thúc với các cuộc gọi kép tới 'externalMenuHandler' từ liên kết' body, html' nhưng điều đó có thể không thành vấn đề. Bạn có thể có thể lấy đi với chỉ ràng buộc 'externalMenuHandler' để' html' nhưng bạn muốn trình duyệt kiểm tra để đảm bảo nó hoạt động đúng trong tất cả các trình duyệt mà bạn quan tâm. –