我使用以下 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 is undefined 的错误。有没有办法让它工作,或者谷歌不支持dojox扩展?

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

有帮助吗?

解决方案

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

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

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");
    ...
}

其他提示

更好的问题是——你为什么想要这样做?如果您在本地主机上进行开发,则只需使用相对路径,如果您在面向互联网的服务器上进行开发,则将 dojo 文件粘贴到该路径上。

另外 - 确保你没有犯规 同源政策

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

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

dojox 实际上已不再维护,将从 dojo-2 中删除。dojox 中的大多数小部件都存在重大问题,只有少数是好的。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top