7

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

├── 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!");

});

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

怎么了?我看不懂?

4

3 回答 3

4

阅读本期:https ://github.com/jrburke/requirejs/issues/435

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

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

所以现在,如果你需要'lib/jquery'它就行不通了。您必须完全要求'jquery'它才能工作。

编辑:

如果你想把 jquery 放在lib/文件夹中并且你的基本 url 是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 $
});
于 2013-06-03T03:39:05.150 回答
1

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

修复main.js

define(['lib/jquery'], function () {
     $("#hello").html("Wow this works!");
});
于 2012-10-19T23:56:53.033 回答
0
<script data-main="js" src="js/lib/require.js"></script>
<script src="js/main.js"></script>

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

于 2012-10-20T00:51:34.817 回答