0

我正在尝试将 dojo 小部件添加到页面。因为它是一个旧应用程序,所以我使用的是 dojo 1.6。该小部件在一个带有 HTML 模板和定义一些额外选项的 CSS 文件的 js 文件中定义。

我正在使用 JSP 和 JSPF,并且由于某种原因(可能是两者之间的区别?)当我将<script>标签放入我正在使用的 JSPF 文件中时,它们在页面加载时不会运行。我想我稍后会解决这个问题,同时只是为了测试我将代码放在运行脚本标记的头 JSP 文件中的其他内容。

dojo.require("x.y.z");

<div
    id="testDiv"
    dojoType="x.y.z" onclick="dojo.parser.parse()">abc</div>

这按我想要的方式工作。有一个 div,当我单击它时,它会使用我定义的模板加载 dojo 小部件。

在 JSPF 文件中,我放了相同的 div (abc),然后我也做了类似的事情,但又上一步:

<div onclick="
    dojo.require('x.y.z');
    var n = document.createElement('div');
    n.setAttribute('id', 'xyz');
    n.setAttribute('dojoType', 'x.y.z');
    n.setAttribute('onclick', 'dojo.parser.parse()')
    n.innerHTML = 'Test';
    document.body.appendChild(n);
    ">Click Me Please!</div>

我把它放进去的原因是,当我只有 abc 时,它在 Firebug 中给了我以下错误:

Error parsing in _ContentSetter#Setter_1:13_0
Error: Could not load class 'x.y.z

Error undefined running custom onLoad code: This deferred has already been resolved
undefineddojo._scopeArgs = [undefined];

我想这是因为 xyz 不是 dojo.require'd,不像 JSP 那样,因为我无法让 javascript 在 jspf 中自动运行,所以我写了“请点击我”在 onclick 和然后做同样的事情,只是为了尝试测试并让它们工作。

第二个的想法是我应该能够单击它并让 div 从以前出现。它似乎做得很好并创建了div,但是当我点击div时它说

Tried to register widget with id==(numbers) but that id is already registered

所以我认为这是因为我只是在所有内容上运行 dojo.parser.parse,它已经在页面上捕获了一些东西——实际上我应该在我制作的新东西上运行它。所以我试图弄清楚如何只做一件事 dojo.parser.parse 。我找到了 1.8 和 1.7 但不是 1.6 的信息。我该如何做到这一点,我是否正确理解事物并做出良好的假设?

4

1 回答 1

0
Error: Could not load class 'x.y.z

意味着您正在调用require一个在包描述位置中找不到的类。xyz 转换为来自 dojo.js 文件的相对路径(通过 script-tag 包含),如下所示:

 <!-- if -->
 <script src="/server/path/dojotoolkit/dojo/dojo.js"></script>
 <!-- then -->
 <script>dojo.require("x.y.z");</script>
 <!-- equals -->
 <script src="/server/path/dojotoolkit/dojo/ ../x/y/z.js"></script>

由于类无法加载,可能的原因是文件不存在并且您遇到 HTTP 404 错误。

就此错误消息而言:

Tried to register widget with id==(numbers) but that id is already registered

这意味着您已经创建了两次小部件(您设置了唯一 ID:testDiv)。可能是因为 div onclick 被调用了两次.. dijit widgetId 必须保持唯一 - 如果您迫切需要创建一个新的相同的id,请先调用dijit.byId(id).destroy();

简单的方法是在您的标记中留下 no id,然后将生成一个通用的自动递增 id。

于 2012-08-17T21:09:56.223 回答