我想和 dojo 一起开始。
因此,我使用他们的教程:http://dojotoolkit.org/documentation/tutorials/1.8/hello_dojo/
最简单的教程显示此页面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Tutorial: Hello Dojo!</title>
</head>
<body>
<h1 id="greeting">Hello</h1>
<!-- load Dojo -->
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.8.1/dojo/dojo.js"
data-dojo-config="async: true"></script>
</body>
</html>
我现在打开页面(在他们的页面上尝试了本地版本和托管版本)。
dojo.query("h1")
在我的firebug控制台上我得到了这样的信息:
参考错误:dojo未定义
请帮帮忙
4条答案
按热度按时间bvn4nwqk1#
这个问题缺少正确答案。它不起作用的原因是因为您启用了
async
模式。它实际上做的是将异步加载Dojo核心。Dojo核心是Dojo的一部分,在您加载
dojo.js
文件时自动加载。它设置一个名为dojo
的全局变量,该变量包含dojo.query
部分等基本功能。你的问题是你实际上没有等待内核加载,因为内核没有加载,
dojo
将是undefined
,给你这个错误。在使用AMD加载器(
require()
)时,您应该只使用async
模式,如果您不想使用它(传统模式),您只需将async
设置为false
。但实际上,此模式已弃用,将在Dojo 2.0中删除。另一种解决方案是使用AMD加载程序(异步模块加载程序),正确的语法是:
在本例中,您可能还没有加载DOM,因此最佳答案是等待DOM也加载,结果是:
您在使用协议隐含URL时指出它正在工作。然而,这不是真的。它突然工作的唯一原因是因为您离开了
async
属性,该属性默认为false
。与Christofer所说的不同,传统模式仍然可用,但已被弃用。
Agnes' answer将工作,因为它使用的是AMD加载程序。然而,结合旧代码和新语法看起来不太好。如果你选择AMD,你应该把所有的东西都放在AMD,而不仅仅是某些部分。
wnavrhmk2#
由于以前没有Dojo的经验,我通读了一些文档。特别是this part,谈到了“现代Dojo”。
事实证明,从1.7版开始,您不再能够只加载dojo.js并期望调用
dojo.something
,而使用“new Dojo”,这就不再可能了,这就是为什么您需要dojo is not defined
。有关详细信息,请阅读有关如何开始的更新文档,但这里有一个简单的hello world:
如果您喜欢使用旧的方法,我想您可以参考Dojo 1.7之前的版本,但是使用遗留版本很少是一个好的方法,所以我建议您学习新的方法。
3zwjbxry3#
bjg7j2ky4#
你确定你的dojo源代码是在“//ajax.googleapis.com/ajax/libs/dojo/1.8.1/dojo/dojo.js“因为你的文件夹结构看起来像在googleapis文件夹是“http://ajax.googleapis.com/ajax/libs/dojo/1.8.1/dojo/dojo.js“