我认为我缺少一些东西。我已经读过你可以使用RequireJS而不是使用Dojo加载器来使用dojo模块。我对RequireJS和定义模块感到满意,但我似乎无法弄清楚发生了什么。我查看了dojo js文件,发现他们使用的是define(),就像我声明自己的模块一样。我的文件组织如下
// File path
-js
main.js
- lib
.require.js
-dojo
// All dojo files
我不确定我缺少什么,但是当我尝试加载Dojo模块时,该值未定义。 下面是一些示例HTML:
// index.html
<html>
<head>
</head>
<body>
// include require script & set main.js
<script data-main="js/main" src="js/lib/require.js"></script>
</body>
</html>
和示例main.js文件......
// Sample main.js file
// BaseUrl = js/
require.config({
packages : [
name : 'dojo',
location : 'lib/dojo';
]
});
require(['dojo', 'dojo/dom'], function(dojo, dom) {
// 'dojo' should load dojo/main.js
// 'dojo/dom' should load dojo/dom.js
// But they have a value of "undefined" when I look at them in the console
console.log(dojo);
});
任何想法我做错了什么?作为附注,有时我在控制台中出现此错误
TypeError: _3.add is not a function
[Break On This Error]
_3.add("dom-addeventlistener",!!document.addEventListener);
提前致谢!
答案 0 :(得分:1)
_3.add("dom-addeventlistener",!!document.addEventListener);
实际上是has.add("dom-addeventlistener", !!document.addEventListener);
错误_3.add is not a function
是由于与dojo的AMD实现不同的requirejs没有定义has.js API。 Dojo尝试从AMD加载器中提取has.js实现。如果使用外部加载程序,则必须通过dojoConfig指示它。运行缩小的构建时,您需要将staticHasFeatures
添加到构建配置文件:
staticHasFeatures: {
"dojo-has-api": 0 // default 1
}
这样做解决了我的问题。
答案 1 :(得分:1)
将所有dojo文件放在js文件夹中。
您的文件夹结构应该像
// Folder structure
-js
-dojo
-dijit
-dojox
注意:确保您提供对js / *路径的访问权限。所以网址:http://localhost:8080/app/js/dojo/dojo.js可以访问。
然后使用requireJS使用以下脚本添加dojo模块,
setTimeout(
function() {
var dojoConfig = {
async : true
};
require.config({
packages :
[ {
name : 'dojo',
location : '../js/dojo'
} ],
});
require(
[ 'dojo', 'dojo/dom' ],
function(dojo, dom) {
console.log(dojo);
dom.byId("myDiv").innerHTML = "updatedHTML content";
});
}, 1000);
就是这样。
答案 2 :(得分:0)
首先,您的包配置定义是一个对象数组:
require.config({
packages : [
{
name : 'dojo',
location : 'lib/dojo';
}
]
});
之后,你应该检查你的devtools网络选项卡,以确保require.js正在加载正确的文件并且路径是好的。请注意,location
相对于baseUrl
。
希望这有帮助!
答案 3 :(得分:0)
_3
表示您正在使用dojo的缩小的独立分发。如果您想将Dojo与其他加载器一起使用,我相信您希望使用their download page中的Source / SDK下载。