簡體   English   中英

dojo教程:未定義dojo

[英]dojo tutorial: dojo is not defined

我想用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>

我現在打開頁面(在他們的頁面上嘗試了localy和托管版本)。 當我寫作

dojo.query("h1")

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

ReferenceError:未定義dojo

請幫忙

這個問題缺乏正確的答案。 這不起作用的原因是因為您啟用了async模式。 這實際上做的是Dojo核心將異步加載。

Dojo核心是加載dojo.js文件時自動加載的Dojo的一部分。 它設置一個名為dojo的全局變量,它包含dojo.query部分等基本功能。

你的問題是你實際上並沒有等待核心加載。 因為未加載核心,所以dojo將是undefined ,從而導致該錯誤。


您只應在使用AMD加載程序( require() )時使用async模式,如果您不想使用它(傳統模式),則只需將asyncfalse 但是這種模式實際上棄用 ,並將在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的回答是有效的,因為它使用的是AMD加載器。 但是,將遺留代碼和新語法結合起來看起來並不順利。 如果你選擇AMD,你應該把所有東西都放在AMD而不僅僅是某些部分。

以前沒有Dojo的經驗,我通讀了一些文檔。 特別是這部分 ,談論“現代道場”。

事實證明,從版本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的版本,但使用舊版本很少是一個好方法,所以我建議您學習新的做事方式。

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

您確定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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM