Я хочу начать с додзё.

Поэтому я использую их учебники: 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 я получаю сообщение:

ReferenceError: dojo не определено

Пожалуйста помоги

2
RCK69 30 Янв 2013 в 11:26

4 ответа

Лучший ответ

Вы уверены, что ваш источник для dojo находится в "//ajax.googleapis.com/ajax/libs/dojo/1.8.1/dojo/dojo.js", потому что ваша структура папок выглядит как в папке googleapis, которая "http://ajax.googleapis.com/ajax/libs/dojo/1.8 0,1 / додзё / dojo.js »

1
user1875420 30 Янв 2013 в 07:31

Не имея предыдущего опыта работы с 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>

Если вам нравится использовать старый способ, я думаю, вы могли бы сослаться на версию Dojo до 1.7, но использование устаревшей версии редко является хорошим способом продвижения вперед, поэтому я рекомендую вместо этого изучить новый способ ведения дел.

3
Christofer Eliasson 30 Янв 2013 в 08:00
<!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>
3
Agnes Marcinik 14 Авг 2013 в 19:12

На этот вопрос нет правильного ответа. Причина, по которой это не работает, заключается в том, что вы включили режим async. На самом деле это то, что ядро Dojo будет загружаться асинхронно.

Ядро Dojo - это часть Dojo, которая загружается автоматически при загрузке файла dojo.js. Он устанавливает глобальную переменную с именем dojo, которая содержит базовые функции, такие как часть dojo.query.

Ваша проблема в том, что вы на самом деле не ждете загрузки ядра. Поскольку ядро не загружено, dojo будет undefined, сообщая вам об этой ошибке.


Вы должны использовать режим async только при использовании загрузчика AMD (require()), если вы не хотите его использовать (традиционный режим), вы просто помещаете async в {{X3} } . Но этот режим на самом деле устарел и будет удален в 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.

В отличие от Кристофера, старый режим все еще доступен, но не рекомендуется.

Ответ Агнес будет работать, потому что он использует загрузчик AMD. Однако объединение устаревшего кода и нового синтаксиса выглядит не очень хорошо. Если вы выбираете AMD, вы должны поместить все в AMD, а не только определенные части.

7
g00glen00b 20 Мар 2019 в 08:29