我正在尝试将 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 的信息。我该如何做到这一点,我是否正确理解事物并做出良好的假设?