2012-02-07 16 views
5

Sto usando _.bindAll in molte mie Backbone.Views.Underscore bindAll, denominazione del metodo esplicito

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

Mentre refactoring questo diventa abbastanza noioso come ho bisogno di mantenere i punti di vista metodi e le liste di nomi in sincronia. In entrambi i casi questo porta spesso a errori semplici.

Come v'è una versione breve del bindAll, che eliminerebbe questo bisogno, mi chiedo che cosa gli svantaggi (di prestazioni, la leggibilità, flessibilità, ..) esistono e ti considera accettabili per ottenere un po 'di un aumento della produttività .

_.bindAll(this); 

risposta

4

Non c'è penalità pratico prestazioni per l'utilizzo di quella forma di bindAll. Tuttavia, sarà un problema se non si desidera che un metodo sia associato a this per qualche motivo.

Tuttavia, è possibile che non sia necessario utilizzare bindAll tutte le volte che si pensa. Tutti i metodi associati ai gestori di eventi (con l'hash degli eventi) vengono associati automaticamente a this.

Inoltre, quando si associa esplicitamente un evento, è possibile passare il binding this nel terzo parametro. Per esempio:

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

+0

Grazie. Il mio maggiore utilizzo è dovuto a un eventBus a livello di app, in cui il binding automatico non è a posto:/Thx per indicare di legare 'this', direttamente quando dichiaro il binding del modello (Nota: penso che dovrebbe leggere:' this. model.on'). Infine, sono curioso: quali sono gli scenari, in cui non voglio che i miei metodi di visualizzazione siano legati alla vista stessa? – SunnyRed

+2

Right, Backbone 0.9 ora utilizza "on" anziché "bind" come in 0.5 e precedenti. Nel "mondo vista" trovo che tu voglia quasi sempre che questo sia la vista. Ma se sei davvero attaccato alla convenzione jQuery di "questo" essendo un obiettivo evento, questo potrebbe non funzionare per te. Personalmente, mi piace la coerenza nell'uso di "questo". – maxl0rd

4

I'v utilizzato _.bindAll(this) nel progetto di backbone per un po '. Dopo aver profilato il codice mi sono reso conto che le chiamate a _.bindAll prendono parte notevole di tutte le chiamate di funzione.
Sulla base dei risultati del test di prestazioni http://jsperf.com/underscore-bindall-this-vs-bindall-this-params sembra che il metodo esplicito di denominazione è più performante (soprattutto per gli oggetti con un sacco di funzioni)

Problemi correlati