[英]dojo tutorial: dojo is not defined
我想用dojo获得startet。
因此我正在使用他们的教程: 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>
我现在打开页面(在他们的页面上尝试了localy和托管版本)。 当我写作
dojo.query("h1")
在我的firebug控制台中,我收到消息:
ReferenceError:未定义dojo
请帮忙
这个问题缺乏正确的答案。 这不起作用的原因是因为您启用了async
模式。 这实际上做的是Dojo核心将异步加载。
Dojo核心是加载dojo.js
文件时自动加载的Dojo的一部分。 它设置一个名为dojo
的全局变量,它包含dojo.query
部分等基本功能。
你的问题是你实际上并没有等待核心加载。 因为未加载核心,所以dojo
将是undefined
,从而导致该错误。
您只应在使用AMD加载程序( require()
)时使用async
模式,如果您不想使用它(传统模式),则只需将async
为false
。 但是这种模式实际上已被弃用 ,并将在Dojo 2.0中删除。
另一个解决方案是使用AMD加载器(异步模块加载器),正确的语法是:
require([ "dojo/query" ], function(query) {
query("h1");
});
在这个例子中,你可能还没有加载DOM,所以最好的答案是等待DOM加载,导致:
require([ "dojo/query", "dojo/domReady!" ], function(query) {
query("h1");
});
当您使用协议隐含URL时,您表明它正在工作。 但是,事实并非如此。 它突然工作的唯一原因是因为你离开了async
属性,默认为false
。
与Christofer不同,传统模式仍然可用,但它已被弃用。
Agnes的回答是有效的,因为它使用的是AMD加载器。 但是,将遗留代码和新语法结合起来看起来并不顺利。 如果你选择AMD,你应该把所有东西都放在AMD而不仅仅是某些部分。
以前没有Dojo的经验,我通读了一些文档。 特别是这部分 ,谈论“现代道场”。
事实证明,从版本1.7开始,您不能再只加载dojo.js并期望调用dojo.something
。 随着“新道场”,这已不再可能。 这就是你dojo is not defined
原因。
有关更多信息,请阅读有关如何入门的更新文档,但这是一个简单的问候世界:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Tutorial: Hello Dojo!</title>
<link rel="stylesheet" href="../../../resources/style/demo.css">
</head>
<body>
<h1 id="greeting">Hello</h1>
<!-- load dojo and provide config via data attribute -->
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.8.3/dojo/dojo.js" data-dojo-config="isDebug:1, async:1"></script>
<script>
require(["dojo/dom", "dojo/domReady!"], function(dom){
var greeting = dom.byId("greeting");
greeting.innerHTML += " from Dojo!";
});
</script>
</body>
</html>
如果您喜欢使用旧方法,我想您可以在1.7之前引用Dojo的版本,但使用旧版本很少是一个好方法,所以我建议您学习新的做事方式。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Title</title>
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.9.1/dojo/dojo.js" data-dojo- config="async: true"></script>
</head>
<body>
<script>
require(["dojo"], function(dojo){
dojo.ready(function(){
//Your code here
});
});
</script>
</body>
</html>
您确定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 “
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.