2013-10-22 11 views
7

Sto creando l'app nodo con browserify per modulare il codice frontend. Purtroppo, non riesco a Backbone di lavoro, perché è gettare questo errore:

Uncaught TypeError: Property '$' of object #<Object> is not a function 

jQuery viene caricato prima di questo script:

var _ = require('underscore'), 
    Backbone = require('backbone'); 

// Here, jQuery works fine. 
$(function() { 
    Backbone.history.start(); 
}); 

E 'sembrare Backbone non riusciva a trovare jQuery quando si utilizza browserify .

+0

probabilmente hai bisogno di uno spessore per la dorsale, hai una configurazione da qualche parte? – dezman

+0

Cosa intendi con "config"? Backbone dovrebbe funzionare con i moduli CommonJS quindi non ha bisogno di shim. – rgtk

+0

è $ undefined quando si inserisce un punto di interruzione sulla linea che causa l'errore? – dezman

risposta

12

Basta impostare manualmente Backbone.$ = window.$. Backbone cerca jquery in una variabile globale (che è definita catturando this) ed è probabile che browserify esegua lo script non in un contesto globale (che è coerente con CommonJS).

+0

Ha funzionato, ma perché ho bisogno di farlo? jQuery è nella variabile globale perché è caricato da un altro file. – rgtk

+2

Penso che succeda qualcosa del genere: http://jsfiddle.net/zw4Pc/1/, ovvero, browserify avvolge i moduli in funzioni e lo chiama in qualche altro contesto, come il contesto del modulo. Se Backbone ha usato 'window. $' Per riferirlo ha funzionato, ma Backbone usa 'this. $' Per catturare jQuery. – vkurchatkin