2012-02-07 14 views
5

Estoy usando _.bindAll en muchos de mis Backbone.Views.Subrayar bindAll, método explícito que nombra

_.bindAll(this, 'render', 'addOne', 'addAll', 'someFunctionA', 'someFunctionB'); 

Mientras refactorización esto se convierte en bastante tedioso, ya que necesito para mantener a los métodos de puntos de vista y los listados de nombres de sincronización. Ambas formas a menudo conducen a errores simples.

Como hay una versión corta de bindAll, que eliminaría esta necesidad, me pregunto qué inconvenientes (rendimiento, legibilidad, ...) existen y los considera aceptables para aumentar un poco la productividad. .

_.bindAll(this); 

Respuesta

4

No hay ninguna penalización de rendimiento práctico para usar esa forma de bindAll. Sin embargo, será un dolor si no desea un método vinculado a this por alguna razón.

Sin embargo, es posible que no necesite utilizar bindAll tantas veces como lo crea necesario. Todos los métodos que están vinculados a controladores de eventos (con el hash de eventos) se enlazan automáticamente al this.

Además, cuando se va a enlazar de forma explícita un evento, puede pasar el this vinculante en el tercer parámetro. Por ejemplo:

this.model.bind('change', this.render, this)

+0

Gracias. Mi mayor uso se debe a un EventBus de toda la aplicación, en la unión automática no está en su lugar:/Thx por señalar a unir 'this', directamente cuando se declaro el modelo de unión (Nota: Creo que debería decir:' esto. model.on'). Por último, tengo curiosidad: ¿Cuáles son los escenarios, donde no quiero que mis métodos de vista se vinculen con la vista en sí? – SunnyRed

+2

Derecha, Backbone 0.9 ahora usa "on" en lugar de "bind" como en 0.5 y antes. En el "mundo de la vista" me parece que casi siempre quieres que "este" sea la vista. Pero si realmente está apegado a la convención de jQuery de que "this" sea un objetivo de evento, puede que esto no funcione para usted. Personalmente, me gusta la consistencia en el uso de 'this'. – maxl0rd

4

I'v utilizado _.bindAll(this) en proyecto columna vertebral por un tiempo. Después de perfilar el código, me di cuenta de que las llamadas al _.bindAll toman una parte notable de todas las llamadas a funciones.
Con base en los resultados de la prueba de rendimiento http://jsperf.com/underscore-bindall-this-vs-bindall-this-params parece que explícita de nombres método es más performante (especialmente para objetos con una gran cantidad de funciones)

Cuestiones relacionadas