2014-06-09 21 views
6

Sto usando _.bind da underscore.js, tuttavia non funziona in IE8/9.Underscore bind non funziona in IE8

capisco MDN ha un lavoro in giro (MDN Polyfill - ma non so se questo può essere applicata alla biblioteca di sottolineatura, o se v'è una correzione per questo in sé sottolineatura

Un esempio di quello che sto cercando di raggiungere è:

window.onload = _.bind(function() { 

    this.product.quantityListing(); 
}, this); 

EDIT: sto usando un'istanza di _.bind altrove e funziona in IE8 - tuttavia è solo che non funziona quando voglio controllare la finestra è stato caricato in IE

.
+0

Perché stai usando 'new _.bind (fn)' qui? Il 'nuovo' sembra inutile qui. –

+0

Underscore fondamentalmente ** è ** una raccolta di polyfill. – Prinzhorn

+0

Sì, questa è la via in cui sono sceso, ma volevo evitare di farlo e usare _.bind - tuttavia è necessario andare avanti, quindi dovremo basare lo –

risposta

3

_.bind e ilLo shimdi MDN fa essenzialmente la stessa cosa. Se si utilizza il metodo MDN, non è necessario utilizzare il metodo Underscore.js.

Si potrebbe utilizzare il metodo MDN in questo modo:

window.onload = (function() { 
    this.product.quantityListing(); 
}).bind(this); 

D'altra parte, se si utilizza lo spessore MDN prima di includere sottolineatura nella tua pagina, Underscore saranno, se necessario, utilizzare la versione spessorato.

Quindi, se si include lo spessore prima di Underscore, è possibile utilizzare quello che preferisci. Personalmente mi limiterei ad usare Function#bind, perché ha (molto leggermente) prestazioni migliori nei browser che lo supportano nativamente.

+1

Notando che underscore userà Function.bind se presente quindi se lo shim MDN viene caricato prima del carattere di sottolineatura, quindi il segno di sottolineatura utilizzerà lo shim poiché creerà Function.bind. Utile se il codice base lo sta già utilizzando e un refactoring non è possibile. – GillesC

0

L'intera premessa di Underscore è che è lavoro per IE8 e altri browser, ma il modo in cui lo si utilizza è molto insolito se non è sbagliato. Si usa in questo modo:

window.onload = _.bind(function() { 
    this.product.quantityListing(); 
}, this); 

Vale a dire senza la parola chiave new.

Il risultato di _.bind() è una chiusura su cui è associato this; una volta terminato il caricamento del documento, chiamerà la funzione con il contesto previsto.

+0

quello era il mio male, il nuovo non dovrebbe essere lì - tuttavia non funziona ancora –