dojo教程:dojo未定义

7tofc5zh  于 2022-12-16  发布在  Dojo
关注(0)|答案(4)|浏览(221)

我想和 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未定义
请帮帮忙

bvn4nwqk

bvn4nwqk1#

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

Dojo核心是Dojo的一部分,在您加载dojo.js文件时自动加载。它设置一个名为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' answer将工作,因为它使用的是AMD加载程序。然而,结合旧代码和新语法看起来不太好。如果你选择AMD,你应该把所有的东西都放在AMD,而不仅仅是某些部分。

wnavrhmk

wnavrhmk2#

由于以前没有Dojo的经验,我通读了一些文档。特别是this part,谈到了“现代Dojo”。
事实证明,从1.7版开始,您不再能够只加载dojo.js并期望调用dojo.something,而使用“new Dojo”,这就不再可能了,这就是为什么您需要dojo is not defined
有关详细信息,请阅读有关如何开始的更新文档,但这里有一个简单的hello world:

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

如果您喜欢使用旧的方法,我想您可以参考Dojo 1.7之前的版本,但是使用遗留版本很少是一个好的方法,所以我建议您学习新的方法。

3zwjbxry

3zwjbxry3#

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

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

相关问题