我正在尝试使用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
。
有什么问题?我无法理解?
答案 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()
调用