2

如何在 Spring roo 中包含和使用dojo/dom库。

这:

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

有人可以帮忙吗?

4

3 回答 3

2

我认为roo中dojo的版本目前低于1.7。这意味着您可以从代码中删除以下行,因为 remoteAttr 函数是 dojo.js 的一部分:

dojo.require('dojo/dom');

见这里:http ://dojotoolkit.org/reference-guide/1.7/dojo/removeAttr.html

于 2012-07-28T03:38:36.817 回答
2

命名空间 => 到模块路径是通过替换句点 (.) 来检索的,简而言之 - 您需要用点替换斜杠。你的要求应该是

  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 .....)
于 2012-07-28T17:43:34.887 回答
1

您需要使用 dojo config 配置 dojo。我更喜欢这里解释的表格:

http://dojotoolkit.org/reference-guide/1.7/dojo/_base/config.html#explicitly-creating-a-dojoconfig-object-before-包括-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

于 2012-07-28T11:17:24.427 回答