dojo教程:未定义dojo

时间:2013-01-30 07:26:57

标签: javascript html dojo

我想通过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>

我现在打开页面(在他们的页面上尝试了localy和托管版本)。 当我写作

dojo.query("h1")

在我的firebug控制台中,我收到了消息:

  

ReferenceError:未定义dojo

请帮忙

4 个答案:

答案 0 :(得分:7)

这个问题缺乏正确答案。这不起作用的原因是因为您启用了async模式。这实际上做的是Dojo核心将异步加载。

Dojo核心是加载dojo.js文件时自动加载的Dojo的一部分。它设置了一个名为dojo的全局变量,其中包含dojo.query部分等基本功能。

您的问题是您实际上并没有等待核心加载。由于未加载核心,dojo将为undefined,从而为您提供错误。


在使用AMD加载程序(async)时,您应该只使用require()模式,如果您不想使用它(传统模式),只需将async添加到false {1}}。但此模式实际上是已弃用,并将在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' answer会起作用,因为它使用的是AMD加载程序。但是,将遗留代码和新语法结合起来看起来并不顺利。如果您选择使用AMD,则应将所有内容都放在AMD中,而不仅仅是某些部分。

答案 1 :(得分:3)

之前没有Dojo的经验,我通读了一些文档。特别是this part,谈论“现代道场”。

事实证明,从版本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,但使用旧版本很少是前进的好方法,所以我建议您学习新的做事方式

答案 2 :(得分:3)

<!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>

答案 3 :(得分:1)

您确定dojo的来源位于“//ajax.googleapis.com/ajax/libs/dojo/1.8.1/dojo/dojo.js”中,因为您的文件夹结构在googleapis文件夹中显示为“{ {3}}“