RCK*_*K69 2 html javascript dojo
我想用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>
Run Code Online (Sandbox Code Playgroud)
我现在打开页面(在他们的页面上尝试了localy和托管版本).当我写作
dojo.query("h1")
Run Code Online (Sandbox Code Playgroud)
在我的firebug控制台中,我收到消息:
ReferenceError:未定义dojo
请帮忙
这个问题缺乏正确的答案.这不起作用的原因是因为您启用了async模式.这实际上做的是Dojo核心将异步加载.
该道场核心是,当你加载时自动加载道场的部分dojo.js文件.它设置一个全局变量dojo,其中包含部件等基本功能dojo.query.
你的问题是你实际上并没有等待核心加载.因为核心没有被加载,dojo所以undefined会给你那个错误.
你应该只async在使用AMD loader(require())时使用模式,如果你不想使用它(传统模式),你只async需要使用false.但是这种模式实际上已被弃用,并且在Dojo 2.0中将被删除.
另一个解决方案是使用AMD加载器(异步模块加载器),正确的语法是:
require([ "dojo/query" ], function(query) {
query("h1");
});
Run Code Online (Sandbox Code Playgroud)
在这个例子中,你可能还没有加载DOM,所以最好的答案是等待DOM加载,导致:
require([ "dojo/query", "dojo/domReady!" ], function(query) {
query("h1");
});
Run Code Online (Sandbox Code Playgroud)
当您使用协议隐含URL时,您表明它正在工作.但是,事实并非如此.它突然工作的唯一原因是因为你离开了async房产,默认为false.
与Christofer不同,传统模式仍然可用,但它已被弃用.
Agnes的回答是有效的,因为它使用的是AMD加载器.但是,将遗留代码和新语法结合起来并不顺利.如果你选择AMD,你应该把所有东西都放在AMD而不仅仅是某些部分.
| 归档时间: |
|
| 查看次数: |
14621 次 |
| 最近记录: |