加载requirejs和jquery时出错

时间:2012-10-19 23:38:41

标签: javascript jquery requirejs

我正在尝试使用requirejs和jquery进行AMD的简单演示。 以下是我的文件夹结构结构:

├── index.html
└── js
    ├── lib
    │   ├── jquery.js
    │   └── require.js
    └── main.js

在我的index.html文件中,我有以下内容:

  <head>
    <script data-main="js/main" src="js/lib/require.js"></script>
  </head>

  <body>
    <div id="hello">    </div>

  </body>

我的main.js文件如下所示:

define(['lib/jquery'], function ($) {

  $("#hello").html("Wow this works!");

});

但是当我这样做时,我在main.js第3行收到错误:Uncaught TypeError: undefined is not a function

有什么问题?我无法理解?

3 个答案:

答案 0 :(得分:4)

阅读此问题:https://github.com/jrburke/requirejs/issues/435

我的理解是因为jquery如何定义自己。它使用命名的define调用:

define( "jquery", [], function () { return jQuery; } );

现在,如果您需要'lib/jquery',它将无效。您必须完全要求'jquery'才能使用它。

修改

如果你想将jquery放在lib/文件夹中,而你的基本网址是lib/lib/../)的父文件夹,你可以使用这样的垫片:

requirejs.config({
  baseUrl: 'js',
  shim: {
    'lib/backbone': {
      deps: ['lib/underscore', 'lib/jquery'],
      exports: 'Backbone'
    },
    'lib/underscore': {
      exports: '_'
    },
    'lib/jquery': {
      exports: '$'
    }
  }
});

requirejs(['lib/jquery'], function($) {
  // use $
});

答案 1 :(得分:1)

我在main.js的第一行尝试了没有“$”的示例,它运行正常。

修正 main.js

define(['lib/jquery'], function () {
     $("#hello").html("Wow this works!");
});

答案 2 :(得分:0)

<script data-main="js" src="js/lib/require.js"></script>
<script src="js/main.js"></script>

是你想要的。 data-main属性只指向应该是它的相对请求的根。因此,您需要直接加载main或通过脚本标记或内联脚本块中的require()调用