dojo教程:未定义dojo

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dojo教程:未定义dojo相关的知识,希望对你有一定的参考价值。

我想开始使用dojo。

因此我正在使用他们的教程:qazxsw poi

最简单的教程显示此页面

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>

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

ReferenceError:未定义dojo

请帮忙

答案

您确定dojo的来源是“//ajax.googleapis.com/ajax/libs/dojo/1.8.1/dojo/dojo.js”,因为您的文件夹结构在googleapis文件夹中看起来像是“dojo.query("h1")

另一答案

这个问题缺乏正确的答案。这不起作用的原因是因为你启用了http://ajax.googleapis.com/ajax/libs/dojo/1.8.1/dojo/dojo.js模式。这实际上做的是Dojo核心将异步加载。

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

你的问题是你实际上并没有等待核心加载。因为核心没有加载,dojo.query将是dojo,给你这个错误。


你应该只在使用AMD加载器(undefined)时使用async模式,如果你不想使用它(传统模式),你只需将require()放到async。但是这种模式实际上已被弃用,并将在Dojo 2.0中删除。

另一个解决方案是使用AMD加载器(异步模块加载器),正确的语法是:

false

在这个例子中,你可能还没有加载DOM,所以最好的答案是等待DOM加载,导致:

require([ "dojo/query" ], function(query) {
    query("h1");
});

当您使用协议隐含URL时,您表明它正在工作。但是,事实并非如此。它突然工作的唯一原因是因为你离开了require([ "dojo/query", "dojo/domReady!" ], function(query) { query("h1"); }); 财产,默认为async

false说的不同,传统模式仍然可用,但它已被弃用。

Christofer将工作,因为它使用AMD加载器。但是,将遗留代码和新语法结合起来看起来并不顺利。如果你选择AMD,你应该把所有东西都放在AMD而不仅仅是某些部分。

另一答案

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

事实证明,从版本1.7开始,您不能再加载dojo.js并期望调用this part。随着“新道场”,这已不再可能。这就是为什么你得到dojo.something

有关更多信息,请阅读有关如何入门的更新文档,但这是一个简单的问候世界:

dojo is not defined

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

另一答案
<!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教程:未定义dojo的主要内容,如果未能解决你的问题,请参考以下文章

dojo:使用 registry.byID 返回“未定义”

dojo 小部件不会发出事件

Dojo.js AMD 加载程序 - 类型错误:无法将未定义转换为对象

arcgis api for javascript开发时,显示dojo未定义,怎么办。

加载时gridx模块未定义错误

Dojo tabContainer 未正确显示 Dojo 控件