4

我正在使用以下 html 从 Google 的主机加载 dojo。

<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("dojo", "1.1.1");</script>
<script type="text/javascript">
dojo.require("dojox.gfx");
...

这个错误出现在 requre 行,并带有类似 dojox.gfx 的错误未定义。有没有办法使这项工作,或者谷歌不支持 dojox 扩展?

或者,是否有另一个我可以用于标准 dojo 版本的通用主机?

4

4 回答 4

4

与直接从 <script> 标记引用 .js 文件不同(请注意,google js api 也支持这一点,请参见此处),google.load 不是同步的。这意味着当你的代码到达 google.load 时,它不会等待 dojo 完全加载来继续解析;它将直接转到您的 dojo.require 行,并且会在那里失败,因为dojo对象将未定义。

解决方案(如果您不想使用直接 <script> 标记)是将引用 dojo 的所有代码包含在start函数中,并将其设置为回调,方法是:

google.load("dojo", "1.1.1", {callback: start});

function start() {
    dojo.require("dojox.gfx");
    ...
}

或者

google.setOnLoadCallback(start);
google.load("dojo", "1.1.1");

function start() {
    dojo.require("dojox.gfx");
    ...
}
于 2008-09-18T05:03:43.940 回答
0

我相信 google 成为您导入库的命名空间。试试:google.dojo.require

哦!如下所述,不要忘记使用 google.setOnLoadCallback 而不是直接调用您的函数。

于 2008-09-18T04:42:02.650 回答
0

一个更好的问题是——你为什么要这样做?如果您在本地主机上开发,那么只需使用相对路径,如果您在面向 Internet 的服务器上开发 - 将 dojo 文件粘贴在上面。

另外 - 确保您没有违反同源政策

于 2008-09-18T04:43:47.077 回答
0

dojox 实际上是无人维护的,将从 dojo-2 中移除。dojox 中的大多数小部件都存在重大问题,只有少数几个是好的。

恕我直言,dojo 应该是自托管的,因为总有一些东西需要覆盖 - 例如,您需要在这个 dojox.gfx 中进行一些修复。

于 2013-11-07T16:06:31.213 回答