2013-10-22 66 views
7

我正在用browserify创建节点应用程序来模块化前端代码。 不幸的是,我不能让骨干的工作,因为它是引发此错误:

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

jQuery是这个脚本之前加载:

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

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

它看起来像骨干使用browserify时找不到的jQuery 。

+0

你可能需要一个垫片,你有配置的地方吗? – dezman

+0

“config”是什么意思? Backbone应该与CommonJS模块一起工作,因此它不需要垫片。当你在导致错误的行上放置一个断点时, – rgtk

+0

是$ undefined? – dezman

回答

12

手动设置Backbone.$ = window.$。 Backbone在一个全局变量(它是通过捕获this来定义的)查找jQuery,并且它很可能不在全局上下文(这与CommonJS一致)中运行脚本。

+0

它的工作,但为什么我需要这样做? jQuery是全局变量,因为它是从另一个文件加载的。 – rgtk

+2

我认为这样的事情发生了:http://jsfiddle.net/zw4Pc/1/,也就是说,browserify在函数中包装模块,并在模块上下文中调用它。如果Backbone使用'window. $'引用它,但Backbone使用'this。$'来捕获jQuery。 – vkurchatkin

相关问题