我遇到了requireJS
的一些问题,我不熟悉
我有这棵树 应用程序/
public/
master.html
js/
main.js
app.js
lib/
jquery.js
require.js
vendor
upload/
vendor/
dependency_upload.js //a bunch of dependencies file
ulpload.js
slider/
dependency_slider.js //a bunch of dependencies file
slider.js
<{1>}文件中的:
master.html
在我的<script data-main="js/main" src="js/lib/require.js"></script>
文件中
main.js
并且require(['js/lib/jquery.js']);
require({
paths: {
'dependency_upload': 'vendor/upload/vendor/dependencies'
}
}, ['js/vendor/upload/upload.js'], function(App) {
App.upload();
});
require(['js/app.js']);
require({
paths: {
'dependency_slider' : 'vendor/slider/dependencies'
}
}, ['js/vendor/slider/slider.js'], function(App) {
App.slider();
});
或upload.js
中的每一个都具有以下结构。这里slider.js
分别代表上传和滑块
$myfunction
我有两个问题,
1)define(['dependency_$myfunction'],function() {
function $myfunction(){
...
}
return{
$myfunction: $myfunction
}
}
);
加载的行为不稳定:一次两次,js
。顺便说一下,jquery is not recognized
和upload.js
共享依赖关系,并且这些共享依赖项中设置的slider.js
的某些函数被认为是未定义的(可能某些文件被加载了两次?)。那么,我的slider.js
用法是否正确?
答案 0 :(得分:1)
模块加载是异步的,所以如果你真的需要在另一个模块之前加载jQuery,你必须做两件事之一:
1 - 使用jquery的require中的回调函数,这样在加载jquery之前不要尝试加载另一个函数:
require(['js/lib/jquery.js'], function($) {
require({
paths: {
'dependency_upload': 'vendor/upload/vendor/dependencies'
}
}, ['js/vendor/upload/upload.js'], function(App) {
App.upload();
});
});
2 - (这是首选方法)使用shim configuration告诉RequireJS,只要你请求upload.js,它就需要先加载jquery。