Включение библиотеки dojo/dom в Spring Roo

Как можно включить и использовать библиотеку dojo/dom в Spring roo.

Этот:

 <script type="text/javascript">
                      dojo.require('dojo/dom');
                      dojo.ready(function remAttr(){
                          dojo.removeAttr('theId', 'value');
                        }
                     );
</script>

приводит к:

"NetworkError: 404 Introuvable - http://localhost:8131/suivitrc/resources/dojo/dom.js"
dom.js
Could not load 'dojo/dom'; last tried '../dojo/dom.js'

Кто-нибудь может помочь?


person balteo    schedule 27.07.2012    source источник
comment
какую версию spring roo вы используете?   -  person Chris Snow    schedule 29.07.2012


Ответы (3)


Я думаю, что версия dojo в roo на данный момент меньше 1.7. Это означает, что вы можете удалить следующую строку из своего кода, поскольку функция remoteAttr является частью dojo.js:

dojo.require('dojo/dom');

см. здесь: http://dojotoolkit.org/reference-guide/1.7/dojo/removeAttr.html

person Chris Snow    schedule 28.07.2012

Пространство имен => путь к модулю получается заменой точек (.), короче - нужно заменить косую черту на точку. Ваше требование должно быть

  dojo.require('dojo.dom'); // blocking call? djConfig.async must be false

Поскольку ошибка связана с указанным путем dojo.require, это означает, что ваш файл dojo.js найден и загружен (dojo.require не является неопределенным), а baseUrl не относится к модулям dojo.

Дело в том, что вы используете устаревший загрузчик для загрузки модуля AMD, в версии 1.7+ оператор require выглядит по-другому.

  // AMD loader form is
  function callbackFunctionOnComplete(dojoDom) { }
  require([ "dojo/dom" ], callbackFunctionOnComplete); // non-blocking

Итак, как работает dojo.require, предположим, что параметр, который мы передаем в виде строки, называется 'module;

dojo.require = function(module) {
   var parts = module.split('.');

1 - получить пространство имен верхнего уровня (глобальное)

   var packageName = parts.shift(); // first part is the package name

2 - получить имя файла (минус .js)

   var id = parts.pop(); // the last bit

3 - перевести все между ними в путь (относительно packagelocation)

   var mid = parts.join("/");

4 - местоположение пакета поиска (с верхнего уровня)

   var fullpath = // in pseudo
       foreach dojoconfig.packages 
         iff obj.name == packageName 
            set to obj.location

5 добавить остальное и начать загрузку модуля

   fullpath += mid + id + '.js'
   transport.get(..... fullpath .....)
person mschr    schedule 28.07.2012

Вам нужно настроить dojo с помощью dojo config. Я предпочитаю форму, описанную здесь:

http://dojotoolkit.org/reference-guide/1.7/dojo/_base/config.html#explicitly-creating-a-dojoconfig-object-before-include-the-dojo-core.

И вам нужно сказать додзё, где найти его вещи. Пример:

 var dojoConfig =
  {
     baseUrl : "/yourApp/js",  // defines the js folder in your webapp
     tlmSiblingOfDojo: false,
     async: true,
     parseOnLoad:true,
     packages: [
        { name: "app", location: "app"}, // where it is in the js folder

        { name: "dojo", location: "lib/dojo" }, // where it is in the js folder
        { name: "dijit", location: "lib/dijit" },
        { name: "dojox", location: "lib/dojox" }
     ]
  };

Также форма запроса, которую вы используете, устарела. См. http://livedocs.dojotoolkit.org/dojo/require.

person unludo    schedule 28.07.2012