我知道论坛上有很多关于这个问题的问题,但我仍然找不到答案......
我有基于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");
时,我的问题从头开始,我看到它尝试从以下Url加载dojo.io.script - '/ example / io / script .js',这不完全是它所在的地方。我怀疑我错过了一些配置问题,但无法理解哪一个......有人可以帮我解决吗?
也许这是一个微不足道的问题,但我从未与Dojo合作过,只需要基于Dojo快速集成基于Dojo的小部件,jQuery上的myy主应用程序......
SOLUTION:
如果有人感兴趣,我会使用下一个脚本来加载小部件:
// 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');
});
答案 0 :(得分:1)
使用Dojo需要configuration才能使用它,这需要在拉入dojo.js脚本之前加载。
Dojo docs建议将配置放入索引文件(或等效的)头部,但我想你可以在下拉dojo代码之前创建它,特别是如果你知道什么时候需要它。 / p>
所以也许在你输入dojo.js之前尝试创建一个名为“dojoConfig”的全局变量。这是我不久前在网络应用程序中使用的示例配置,但它也有益于您阅读它以及更好地了解它的原因和内容,以及dojo的作用和时间。我建议您至少阅读dojo start和hello dojo教程,然后阅读config和widget based教程。您可能想了解道场如何使用AMD principles。
<script>
var dojoConfig = {
baseUrl: "./",//this is where dojo will lok from for all locations configured
async: true,
isDebug: false,
parseOnLoad: false,//false to allow for us to call this independently in js later on
//here are the packages dojo will be aware of and related js files
packages: [
//dojo specific packages
{name: "dojo", location: "libs/dojo/1.8.1/dojo", main: "dojo.js.uncompressed.js"}, //dojo.js.uncompressed.js for dev, use dojo.js for release
{name: "dijit", location: "libs/dojo/1.8.1/dijit"},
{name: "dojox", location: "libs/dojo/1.8.1/dojox", main: "dojo.js"}
]
};
</script>
我的配置包括dojox和dijit,但当然如果你不需要它们,那么只需删除这些行。虽然你确实提到了dojo小部件,但dijit是dojo从中获取“小部件能力”的地方。
您需要更改配置的基本网址,以反映您自己的dojo位置,以及位置。有关此属性和其他属性的更多详细信息,请查看dojo config tutorial。
对于上面的众多链接感到抱歉,而dojo 1.8是一个很好的框架,特别是在使用模块时,它将需要学习的曲线,以便按照您的意愿开始使用它。我从来没有尝试像之前那样在游戏中加载道场,所以我很想知道你是如何相处的。
祝你好运。