首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dojo教程:未定义dojo

dojo教程:未定义dojo
EN

Stack Overflow用户
提问于 2013-01-30 07:26:56
回答 4查看 17.2K关注 0票数 2

我想找道场的明星。

因此,我正在使用他们的教程:道场/

最简单的教程显示此页面

代码语言:javascript
复制
<!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>

我现在打开页面(在他们的页面上尝试了本地版本和宿主版本)。当我写到

代码语言:javascript
复制
dojo.query("h1")

在我的firebug控制台中,我得到了这样的消息:

ReferenceError:未定义dojo

请帮帮忙

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-30 07:31:42

您是否确定您的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”。

票数 1
EN

Stack Overflow用户

发布于 2014-02-03 13:24:53

这个问题没有一个正确的答案。这不起作用的原因是您启用了async模式。这实际上是要异步加载Dojo核心。

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

您的问题是,您实际上没有等待内核加载。因为没有加载内核,所以dojo将是undefined,从而给出错误。

您应该只在使用async加载程序(require())时使用async模式,如果您不想使用它(遗留模式),只需将async放到false中即可。但这种模式实际上是不推荐的,将在Dojo2.0中删除。

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

代码语言:javascript
复制
require([ "dojo/query" ], function(query) {
    query("h1");
});

在本例中,您可能还没有加载DOM,所以最好的解决方法是等待DOM加载,结果是:

代码语言:javascript
复制
require([ "dojo/query", "dojo/domReady!" ], function(query) {
    query("h1");
});

当您使用协议隐含URL时,您表示它正在工作。然而,事实并非如此。它突然起作用的唯一原因是您没有使用async属性,该属性默认为false

克里斯托说的不同的是,遗留模式仍然可用,但它是不受欢迎的。

艾格尼斯的回答将工作,因为它使用的是AMD加载程序。但是,将遗留代码与新语法结合起来并不是很好。如果你选择AMD,你应该把所有的东西放在AMD,而不仅仅是某些部分。

票数 7
EN

Stack Overflow用户

发布于 2013-01-30 07:51:38

没有以前的Dojo经验,我阅读了一些文档。特别是这部分,谈到“现代Dojo”。

结果是,从1.7版开始,您就不能仅仅加载dojo.js并期望调用dojo.something了。有了“新Dojo",这就不可能了。这就是你得到dojo is not defined的原因。

要获得更多信息,请阅读有关如何开始的更新文档,但下面是一个简单的hello世界:

代码语言:javascript
复制
<!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的一个版本,但是使用遗留版本很少是一个好方法,所以我建议您学习新的方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14598719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档