2012-09-10 11 views
12

me han hash de los eventos que quedan -Unbind Backbone Ver Eventos

events: 
    'click #someButton : 'someFunction' 

para cerrar la vista He tratado

close: 
    $("#someButton").unbind("click") 

y

`close: 

     $("#someButton").remove()` 

Pero algunaFuncion todavía está siendo disparado más de una vez. ¿Cómo desvincular este evento del botón?

También he intentado

$(@el).find("#someButton").unbind("click") as well 
+0

siempre consulte [Backbone Documentation] (http://backbonejs.org/#Events) –

Respuesta

26

Backbone.js ver eventos se delegan a la vista de el (lo que no hay caso con destino a su elemento #someButton sino más bien cuando un evento de clic burbujas hasta la el se comprueba si el evento vino de un elemento que cumpla con ese selector), siendo ese el caso para eliminar el evento que necesita para sacarlo de la el, por ejemplo

$(this.el).off('click', '#someButton'); 

Si desea eliminar al l eventos delegados, puede usar el método undelegate de la vista

+0

mhmm, intenté hacer eso, pero la función todavía está disparando más de una vez – praks5432

+0

Pruebe algo como '$ (this. $ El) .off ("click", "#someButton"); ' – Jack

+0

funcionó :) ¿Qué pasó con la cosa unbind.click (" click ")? – praks5432

0

La explicación y respuesta de Jack son excelentes. Desafortunadamente, su ejemplo de código no funcionó para mí. En lugar de utilizar:

$(this.el).off('click', '#someButton'); 

tuve que usar:

this.$el.off('click', '#someButton'); 

que tiene sentido para mí, ya que el evento estaba destinado a this.$el objeto.

0

Para agregar más, utilicé this.$el.off(); dentro de una inicialización dentro de una subvista para destruir todos los eventos vinculados a la subvista. El mismo evento dispararía X veces que se llamó a una actualización de datos.

vi los objetivos duplicadas usando:

var $target = $(e.currentTarget); 
console.log($target); 

que sería añadir un comentario a una respuesta, pero tengo baja reputación.

Cuestiones relacionadas