从jQuery加载并使用Dojo小部件

时间:2013-01-11 18:49:55

标签: 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");时,我的问题从头开始,我看到它尝试从以下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');
});

1 个答案:

答案 0 :(得分:1)

使用Dojo需要configuration才能使用它,这需要在拉入dojo.js脚本之前加载。

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

所以也许在你输入dojo.js之前尝试创建一个名为“dojoConfig”的全局变量。这是我不久前在网络应用程序中使用的示例配置,但它也有益于您阅读它以及更好地了解它的原因和内容,以及dojo的作用和时间。我建议您至少阅读dojo starthello dojo教程,然后阅读configwidget 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是一个很好的框架,特别是在使用模块时,它将需要学习的曲线,以便按照您的意愿开始使用它。我从来没有尝试像之前那样在游戏中加载道场,所以我很想知道你是如何相处的。

祝你好运。