卓别林在Backbone上找不到jQuery。$(期待一个函数在instanceof check,但得到了身体)

时间:2014-01-20 12:03:41

标签: jquery backbone.js browserify chaplinjs

我有Chaplin / Backbone项目,我正在从RequireJS切换到CommonJS(使用Browserify)。

当我尝试在浏览器中加载应用时,我得到Uncaught TypeError: Expecting a function in instanceof check, but got body。这似乎是因为Backbone.$未定义。

在要求我的应用程序和/或任何Chaplin文件之前,我已经在执行以下操作:

var jQuery = require('jquery'),
    Backbone = require('backbone');

Backbone.$ = jQuery;

所以这应该加载jQuery,如果我检查Backbone。$它就在那里。然而卓别林似乎要么将Backbone.$重置为未定义,要么使用不同的Backbone实例,尽管情况似乎并非如此。

1 个答案:

答案 0 :(得分:0)

问题是Chaplin没有使用与你相同的Backbone对象。事实上,Chaplin需要Backbone 1.0.0而你依赖的是更大的版本(大概是1.1.2)。

因此,当您require('backbone')时,您需要1.1.2 Backbone对象,而当卓别林在其上下文中调用require('backbone')时,将返回Backbone 1.0.0。

这是两个不同的对象,后者将有Backbone.$ === undefined,无论你对第一个做出什么改变。

解决方案是使用与Chaplin相同的版本:将package.json更改为使用Backbone 1.0.0,并使用npm install。这只会在 node_modules 目录中安装Backbone。然后,您将需要与卓别林相同的对象。

另一种解决方案是迫使Chaplin使用与您相同的版本 - 但这可能会破坏其中的一些组件。只需删除 node_modules / chaplin / node_modules / backbone 目录即可。但是,再次说明,这个修复程序非常糟糕,因为您不应该更改 node_modules 目录下的文件。