从jQuery加载和使用Dojo小部件

我知道论坛上有很多关于这个问题的问题,但我仍然找不到答案……

我有基于jQuery的JS应用程序。 现在我必须做一些基于Dojo的小部件集成。 我想只在必要时加载Dojo和小部件,所以想要异步地执行此操作。 我将Dojo存储在我的网站上,所以从我的空间加载它。

这是我尝试在jQuery中使用的代码:

$.getScript("/Content/3rd/dojo/dojo/dojo.js") .done(function (script, textStatus) { dojo.ready(function () { dojo.require("dojo.io.script"); alert('Dojo ready!') }); }) .fail(function (jqxhr, settings, exception) { alert('error!'); }); 

当我尝试调用dojo.require("dojo.io.script");时,我的问题从头开始dojo.require("dojo.io.script"); 这是异步请求所需要的,我发现它试图从以下Url – ‘/Example/io/script.js’加载dojo.io.script,而这并不是它所在的位置。 我怀疑我错过了一些配置问题,但无法理解哪一个…有人可以帮我解决吗?

也许这是一个微不足道的问题,但我从未与Dojo合作,只需要与基于Dojo的小部件快速集成,我在jQuery上的主要应用程序……

解:

如果有人感兴趣,我使用下一个脚本来加载小部件:

 // Load Dojo and scripts for JSDraw2 asyncronously dojoConfig = { baseUrl: "/Content/3rd/dojo-1.8.3/dojo" }; $.getScript("/Content/3rd/dojo-1.8.3/dojo/dojo.js") .done(function (script, textStatus) { dojo.ready(function () { dojo.require("dojo.io.script"); var deferred = dojo.io.script.get({ url: "/Content/3rd/JSDraw2.1.4/JSDraw2.js" }); deferred.then(function () { // init the Dojo widget... oThis.jsDraw = new JSDraw(oThis.element.get(0)); }, function () { alert('Cannot load Scilligence.JSDraw2.js'); }); }); }) .fail(function (jqxhr, settings, exception) { alert('Cannot load Dojo.js'); }); 

好吧,使用Dojo它需要一个配置来配合它,这需要在拉入dojo.js脚本之前加载。

Dojo文档建议将配置放入索引文件(或等效的)头部,但我想你可以在下拉dojo代码之前创建它,特别是如果你知道什么时候需要它。

所以也许在你输入dojo.js之前尝试创建一个名为“dojoConfig”的全局变量。 这是我不久前在Web应用程序上使用的一个示例配置,但它也有益于您阅读它以及更好地了解它为什么以及它的用途,以及dojo做什么以及何时做什么。 我建议至少阅读dojo start和hello dojo教程,然后通过基于配置和小部件的教程。 您可能想了解dojo如何使用AMD原则 。

  

我的配置包括dojox和dijit,但当然如果你不需要它们,那么只需删除那些行。 虽然你确实提到了dojo小部件,但dijit是dojo从中获取“小部件能力”的地方。

您需要更改配置的基本URL以反映您自己的dojo位置,同样也可以更改位置。 查看dojo配置教程 ,了解有关此属性和其他属性的更多详细信息。

对于上面的众多链接感到抱歉,而dojo 1.8是一个很好的框架,特别是在使用模块时,它将需要学习的曲线,以便按照您的意愿开始使用它。 我从来没有尝试像之前那样在游戏中加载道场,所以我很想知道你是如何相处的。

祝你好运。