【问题标题】:$ is not a function. Backbone, jQuery and Browserify$ 不是函数。骨干网、jQuery 和 Browserify
【发布时间】:2013-10-22 21:18:26
【问题描述】:

我正在使用 browserify 创建节点应用程序来模块化前端代码。 不幸的是,我无法让 Backbone 工作,因为它抛出了这个错误:

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();
});

Backbone 在使用 browserify 时好像找不到 jQuery。

【问题讨论】:

  • 您可能需要一个 shim 作为主干,您在某处有配置吗?
  • “配置”是什么意思? Backbone 应该与 CommonJS 模块一起使用,因此它不需要 shim。
  • 在导致错误的行放置断点时是否 $ 未定义?
  • cl.ly/text/1P0V0I1v3j3B- 这是执行错误的代码片段。
  • 是的,对不起。我已经更新了链接。

标签: javascript jquery node.js backbone.js browserify


【解决方案1】:

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

【讨论】:

  • 它有效,但为什么我需要这样做? jQuery 位于全局变量中,因为它是从另一个文件加载的。
  • 我认为会发生这样的事情:jsfiddle.net/zw4Pc/1,也就是说,browserify 将模块包装在函数中并在其他一些上下文中调用它,比如模块上下文。如果 Backbone 使用了 window.$ 引用它工作,但 Backbone 使用 this.$ 来捕获 jQuery。
猜你喜欢
  • 2012-06-09
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 2014-09-05
  • 1970-01-01
相关资源
最近更新 更多