2012-08-17 54 views
0

我正在尝试将dojo小部件添加到页面。因为它是一个旧的应用程序,所以我使用了dojo 1.6。该小部件在一个js文件中定义,其中包含一个HTML模板和一个定义一些额外选项的CSS文件。Dojo 1.6:仅分析一个对象

我正在使用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中进行hackishly要求同样的事情,只是为了尝试测试事情并让它们工作。

第二个想法是,我应该能够点击它,并从前面出现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。我该如何做到这一点,并且我是否正确地理解了事情并做出了很好的假设?

回答

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

表示您在包描述位置找不到的类调用require。 X.Y.Z转换成从所述的dojo.js文件(通过脚本标签在内)的相对路径如下:

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

由于类加载失败,proable原因是文件不存在,则有一个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();

简单就是在你的标记中不留下id,然后会生成一个通用的自动递增的id。