2012-08-17 22 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。