2013-10-22 14 views
7

Ich erstelle eine Knoten-App mit browserify, um den Frontend-Code zu modularisieren. Leider kann ich nicht bekommen Backbone arbeiten, weil es diesen Fehler Wurf:

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

jQuery ist vor diesem Skript geladen:

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

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

Es scheint wie Backbone jQuery nicht finden konnten, bei der Verwendung von browserify .

+0

Sie brauchen wahrscheinlich eine Unterlegscheibe für Backbone, haben Sie irgendwo eine Config? – dezman

+0

Was meinst du mit "config"? Backbone sollte mit CommonJS-Modulen funktionieren, so dass keine Shim benötigt wird. – rgtk

+0

ist $ undefined, wenn Sie einen Haltepunkt an der Zeile setzen, die den Fehler verursacht? – dezman

Antwort

12

Einfach Backbone.$ = window.$ manuell einstellen. Backbone sucht nach jquery in einer globalen Variable (die durch die Erfassung this definiert wird) und es ist wahrscheinlich, dass browserify das Skript nicht in einem globalen Kontext ausführt (was mit CommonJS übereinstimmt).

+0

Es hat funktioniert, aber warum muss ich das tun? jQuery befindet sich in einer globalen Variablen, da sie aus einer anderen Datei geladen wird. – rgtk

+2

Ich denke so etwas passiert: http://jsfiddle.net/zw4Pc/1/, das heißt, browserify Wrapps Module in Funktionen und ruft es in einem anderen Kontext, wie Modul Kontext. Wenn Backbone 'window. $' Reference verwendet hat, funktionierte Backbone 'this. $', Um jQuery zu erfassen. – vkurchatkin