我正在尝试使用requireJS,但我想构建依赖关系的层次结构:main要求obr.platcom和obr.platcom需要obr(例如).
- index.html
-> js
- main.js
-> lib
- jquery.js
- require.js
-> obr [my own 'libraries']
- obr.js
- obr.platcom.js
的index.html
<!DOCTYPE html>
<html lang="es">
<head>
<Meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<Meta name="viewport" content="initial-scale=1.0, width=device-width" />
<title>Platcom</title>
<script type="text/javascript" src="js/lib/jquery.js"></script>
<script data-main="js/main" src="js/lib/require.js"></script>
</head>
<body>
</body>
</html>
main.js
$(document).ready(function() {
require(["obr/obr.platcom"], function() {
obr.hola();
var myPlatcom = obr.platcom();
myPlatcom.test();
});
});
obr.js
var obr = {};
obr.hola = function() {
alert('Hola OBR');
};
obr.platcom.js
require(["obr.js"],function() {
obr.platcom = function(params) {
var that = {};
var test = function test() {
alert('Hola Platcom!');
}
that.test = test;
return that;
}
});
如果我要求main中的obr和obr.platcom文件都可以,但是如果我使用这个嵌套样式,我会收到下一个错误:
Uncaught ReferenceError: obr is not defined main.js:3
你知道我做错了什么吗?
先感谢您.
解决方法:
好吧,你做错了几件事.
>您需要指定要注入的依赖项作为参数.例如,require([“obr / obr.platcom”],function(){除非你指定如何调用所需的模块,否则不会做太多.你应该需要这个:
require(["obr/obr.platcom"], function( obr ) {
这样,您就知道所需对象在哪个变量中.
> obr.js变量位于全局范围内.您需要将它们包装在require或define函数调用中.以下将有效:
define(function() {
var obr = {};
obr.hola = function() {};
return obr;
});
您可能已经注意到上一个文件有些问题.
>如果您希望在某处导入模块,则必须对其进行定义.所以你必须使用define函数,而不是require函数.而且define函数必须返回一个对象.这是一个固定的obr.platcom.js文件:
// If you don't use "define" for the obr.js file too, this won't work
define(['obr'], function( obr ) {
obr.platcom = function() {};
// Don't forget to return the obr object, or the require of
// the main file won't return anything
return obr;
});
这样,事情就以正确的方式完成.或者至少,require.js希望你做的事情.
我希望这能告诉你如何有效地使用require.js来轻松地分离模块中的代码:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。