2010-10-15 42 views
0

我有一個測試的jsp:新手道場 - 谷歌CDN問題

<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojo/dojo.xd.js" type="text/javascript"> 
</script> 

<script type="text/javascript"> 
dojo.require("dojo.widget.Tree"); 
dojo.require("dojo.widget.TreeSelector"); 
dojo.require("dojo.widget.TreeNode"); 
dojo.require("dojo.widget.TreeContextMenu"); 
</script> 
</head> 

<body> 
<div dojoType="TreeSelector" widgetId="treeSelector"></div> 
<div dojoType="Tree" widgetId="treeWidget" selector="treeSelector"toggler="wipe"> 
<div dojoType="TreeNode" widgetId="1" title="First node" isFolder="false"></div> 
<div dojoType="TreeNode" widgetId="2" title="Second node"> 
    <div dojoType="TreeNode" widgetId="2.1" title="Second node First Child"></div> 
    <div dojoType="TreeNode" widgetId="2.2" title="Second node Second Child"></div> 
</div> 
<div dojoType="TreeNode" widgetId="3" title="Third node" isFolder="false"></div> 
</div> 

這不會在任何瀏覽器中工作。 我以爲這很容易,似乎dojo庫沒有被下載/找到? 我需要做其他事嗎?

此外,我的IDE JDeveloper報告說,屬性「dojoType」未在元素div上定義。

回答

1

我不得不說,這個例子看起來是從非常舊版本道場的拍攝,但你要針對Dojo 1.5運行它。這很可能不會起作用。 dojo.widget自從... 0.4,0.9以後就不存在了。

對前面的回答你可能是正確的,因爲在原始示例中沒有parseOnLoad: true是必要的,但我也向你保證,該示例沒有在任何附近的任何版本的Dojo上運行它與。

基於你看有什麼,你可能要開始像這裏的某個地方:http://www.dojotoolkit.org/reference-guide/dijit/Tree.html

1

我不確定默認行爲是什麼時候不存在,但您可能需要定義一個parseOnLoad設置爲true(或直接調用解析器)的djConfig。請參閱以下鏈接瞭解更多信息:

http://docs.dojocampus.org/djConfig

http://dojocampus.org/content/2008/03/08/the-dojo-parser/

+0

addin g djConfig屬性不能解決問題。我從互聯網取得的例子沒有djConfig作爲元素 – bmw0128 2010-10-15 19:23:31

+0

@ bmw012:[使用谷歌加載器並推遲執行](http://stackoverflow.com/questions/3945147/newbie-dojo-google-cdn - 問題/ 3957759#3957759)?這能解決你的問題嗎? – haylem 2010-10-18 09:32:35

0

遵循:

您需要:

  • register for an API key(或使用爲您做了直接的聯繫),如果不使用有直接的聯繫,但google.load
  • ,則需要使用推遲你的代碼的執行一個onload回調。

個人,我只想做一些事情,如:部分<head>的my.html

<script type="text/javascript" src="http://www.google.com/jsapi?key=MY_API_KEY_GOES_HERE"></script> 
<script type="text/javascript" src="my.js"></script> 

my.js

google.load("dojo", "1.5", { 
    uncompressed: true 
}); 

function OnLoad() { 
    /* do stuff here */ 
} 

google.setOnLoadCallback(OnLoad); 
+0

雖然我猜你*可以*做到這一點,但只要在OP正在做的時候(和Dojo的網站指示你那樣)使用Dojo關閉Google CDN,這些都不是必需的。沒有註冊是必要的,只需腳本src dojo版本直接從CDN ... – 2010-10-18 12:06:59

+0

@Ken:我正在給OP的替代品加載庫使用CDN。我懷疑,如果谷歌需要使用谷歌加載器的API密鑰,他們可能會計劃限制收費(根據文檔,您應該在使用直接URL的同時傳遞密鑰,但我同意在沒有它的情況下現在 - 以及用於測試的本地URL)。現在對於我的答案的** rest **來說,這與OP不等待Dojo代碼存在並且需要任何一種方式推遲其使用有關。如果不是使用google.setOnloadcallback,那麼通過使用正常的onload回調。 – haylem 2010-10-18 12:44:50