Подтвердить что ты не робот

JQuery/Dojo - Как использовать jQuery с помощью инструментария Dojo

Как использовать jQuery с помощью инструментария Dojo? Я слышал, что обе библиотеки используются одновременно, jQuery для связанных с DOM и Dojo для интерфейса (dijit), но я не могу найти никаких учебников или примеров этого. Будет ли я сталкиваться с конфликтами или проблемами при загрузке обеих библиотек?

4b9b3361

Ответ 1

Вы можете использовать их рядом друг с другом без проблем, потому что Dojo не переопределяет $, как некоторые другие библиотеки javascript.

Ответ 2

Вы можете использовать jQuery, потянув его в свое приложение с помощью тега script в заголовке вашего сайта, конфликтов с dojo не будет.

Однако что-то иметь в виду при использовании jQuery с dojo, особенно с dojo версии 1.8 и полной поддержкой AMD. Это чище (, особенно если вы не можете потянуть jQuery в заголовке вашего сайта), чтобы воспользоваться преимуществами определения асинхронного модуля AMD ().). Вам нужно будет сделать запись пакета в dojo config script, чтобы правильно вставить фреймворк. Вот пример, который использует расположение библиотеки для jquery и jquery-ui...

<!-- external library configuration code included in header to make sure this
    is loaded before code in body-->
    <!-- dojo config -->
    <script>
            /* Instead of using the inline dojo-config attribute
            * create this variable so we can configure dojo here.
            * This seems a little clearer, easier to read as a config.
            */
            var dojoConfig = {
                baseUrl: "./",
                async: true,
                isDebug: true,
                parseOnLoad: false,//false to allow for us to call this independantly in js later on

                //here are the packages dojo will be aware of and related js files
                packages: [
                    //dojo specific packages
                    {name: "dojo", location: "libs/dojo"},
                    {name: "dijit", location: "libs/dijit"},
                    {name: "dojox", location: "libs/dojox"},
                    {name: "jquery", location: "libs/jquery", main: "jquery-1.8.2"},
                    {name: "jqueryui", location: "libs/jquery", main: "jquery-ui-1.9.1"},
                ]

            };


    </script>

У моей структуры папок есть только папка libs в корне, поэтому у меня есть "./" для базового url, но вы можете так же легко вытащить из места cdn.

Без этой записи конфигурации jQuery не будет функционировать должным образом, и вы можете в конечном итоге получить ошибки "не является функцией", появляющейся в консоли.

Если вы поместите отдельный тег script, чтобы вытащить jQuery или другую стороннюю структуру, а также использовать AMD, чтобы сделать то же самое, вы просто втянете его во второй раз, когда вы require для dojo в первый раз.

Ответ 3

Вы можете использовать загрузчик Dojo AMD для загрузки jQuery.

Следующий фрагмент даже псевдонимы $ до dojo.query и по-прежнему использует jQuery без конфликтов (я не рекомендую его, хотя!):

  define.amd.jQuery = true;

  require(["jquery", "dojo/query", "dojo/NodeList-dom"],
  function(jquery, $) {
    $("output").style("visibility", "visible");     // using Dojo
    jquery("#output").css("visibility", "hidden");  // using jQuery
  });

Полное объяснение и исходный код: Загрузка jQuery с Dojo 1.7 загрузчиком AMD

Ответ 5

jQuery поддерживает AMD уже довольно давно.

Вы можете использовать свойство "paths" вашего конфигуратора ADM, чтобы сообщить вашему загрузчику AMD, где найти jQuery:

var amdconfig = {
  baseUrl: __AMD_CONFIG_BASE_URL__,
  packages: [
    {name: "dojo", location: "./lib/dojo"},
    {name: "app", location: "./app"}
  ],
  paths: {
    jquery: "./lib/jquery/jquery-1.12.4"
  }
};

Затем вы можете импортировать jQuery в свои модули ADM так же, как вы импортируете какой-либо другой модуль AMD, и использовать его вместе с модулями Dojo:

define([
  "dojo/dom",
  "jquery"
], function(
  dom,
  $
) {

  ...

});

Примечание

Вы можете использовать ту же конфигурацию для проектов AMD, которые используют RequireJS вместо Dojo:

if (require.config) {
  // RequireJS
  require.config(amdconfig);
} else {
  // Dojo
  require(amdconfig);
}