Necesito enlazar dos eventos en mi backbone.js
-view para alternar un menú. La idea es que si se hace clic en un botón con el id #toggler
aparece el menú y cualquier clic fuera del elemento #menu
ocultará el menú.Clics de enlace de eventos con backbone.js y jQuery
Lamentablemente no puedo hacer que esto funcione con el enlace de eventos de la red troncal sin tener el outsideMenuHandler()
llamado en cada clic independientemente de si hice clic en el elemento #menu
, o no.
¿Qué debo cambiar para que funcione?
Esto es lo que he hecho en Backbone.js, lo que no funciona como es debido:
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
}
Sólo como referencia, esto es lo que haría usando jQuery solo:
$(document).click(function(event) {
if ($(event.target).closest('#menu').get(0) == null) {
$("#menu").slideUp();
}
});
Muchas gracias por su respuesta. ¡Muy apreciado! Una pregunta rápida: según entiendo, permitir que un evento haga clic en 'false' evitará que se produzca un" evento predeterminado ", lo que significa que todos los demás clics se desactivarán cuando' outsideMenuHandler' devuelva 'false'. ¿Me estoy metiendo en problemas si dejo que mi 'outsideMenuHandler' vuelva 'verdadero' después de realizar mi lógica (ocultando mi menú)? – Industrial
@Industrial: terminará con llamadas dobles a 'outsideMenuHandler' del enlace' body, html', pero eso podría no ser un problema. Probablemente pueda salirse con la única vinculación de 'outsideMenuHandler' a' html', pero querría que el navegador lo verifique para asegurarse de que se comporta correctamente en todos los navegadores que le interesan. –