新手Dojo-谷歌CDN问题

新手Dojo-谷歌CDN问题,dojo,Dojo,我有一个测试jsp,其中包含: <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.w

我有一个测试jsp,其中包含:

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

require(“dojo.widget.Tree”);
require(“dojo.widget.TreeSelector”);
require(“dojo.widget.TreeNode”);
require(“dojo.widget.TreeContextMenu”);
这在任何浏览器中都不起作用。 我认为这很容易,似乎dojo库没有被下载/找到? 我还需要做什么吗

另外,我的IDE JDeveloper报告没有在元素div上定义属性“dojoType”。

我不确定不存在时的默认行为是什么,但您可能需要定义一个parseOnLoad设置为true的djConfig(或直接调用解析器)。有关详细信息,请参阅以下链接:


我不得不说,这个例子看起来像是从一个非常旧的dojo版本中获取的,但是您正在尝试针对dojo 1.5运行它。这很可能行不通<代码>dojo.widget从…0.4、0.9开始就不存在了

您对上一个答案的评论可能是正确的,因为在原始示例中不需要
parseOnLoad:true
,但我还要向您保证,该示例没有运行任何版本的Dojo,与您运行的Dojo非常接近

根据您在那里看到的内容,您可能希望从这里这样的地方开始:

遵循以下步骤:

  • ,
您需要:

  • (或者像您那样使用直接链接)
  • 如果不使用直接链接,而是使用
    google.load
    ,则需要使用onload回调延迟代码的执行
就个人而言,我会做一些类似的事情:

在my.html的
部分中:


添加djConfig属性并没有解决该问题。我从互联网上获取的示例没有将djConfig作为元素either@bmw012:那怎么办?这解决了你的问题吗?虽然我想你可以做到这一点,但在谷歌CDN上使用Dojo并不需要这些,就像OP所做的那样(以及Dojo的网站所指示的那样)。不需要注册就可以直接从CDN上为src编写dojo版本的脚本…@Ken:我给了OP一个替代方案,用CDN加载库。我怀疑,如果谷歌需要API密钥才能使用Google loader,他们可能会计划限制收费(根据文档,您应该在使用直接URL时传递密钥,尽管我同意目前不使用该密钥也可以工作,对于本地URL也可以进行测试)。现在,对于我剩下的答案,这是相关的,因为OP没有等待Dojo代码出现,并且需要任何一种方式来推迟它的使用。如果不使用google.setOnloadcallback,则使用普通onload回调。
<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>
google.load("dojo", "1.5", {
  uncompressed: true
});

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

google.setOnLoadCallback(OnLoad);