1

この件に関してフォーラムに多くの質問があることは知っていますが、まだ答えが見つかりません...

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 - '/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');
});
4

1 に答える 1

1

Dojo を使用するには、それに合わせた構成が必要です。これは、dojo.js スクリプトを取り込む前にロードする必要があります。

Dojoのドキュメントでは、構成をインデックス ファイル (または同等のファイル) のヘッドに配置することを提案していますが、特にいつ必要になるかがわかっている場合は、 Dojoコードをプルダウンする前に構成を作成できると思います。

そのため、dojo.js を取り込む直前に「dojoConfig」というグローバル変数を作成してみてください。少し前に私が Web アプリで使用した構成の例を次に示しますが、それを読んで、それがなぜ、何のためにあるのか、dojo がいつ何をするのかについてのより包括的なアイデアを得るために役立つでしょう。少なくともdojo starthello dojoのチュートリアルを読んでから、 configwidget ベースのチュートリアルに進むことをお勧めします。dojo がAMD の原則をどのように使用しているかについても読みたいと思うかもしれません。

<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がその「ウィジェットパワー」を得る場所です。

構成のベース URL を変更して、Dojo の独自の場所を反映させ、場所についても同様に変更する必要があります。この属性およびその他の属性の詳細については、Dojo 構成チュートリアルを参照してください

上記の多数のリンクで申し訳ありませんが、dojo 1.8 は優れたフレームワークであり、特にモジュールを操作する場合は、意図したとおりに使用し始めるには学習曲線が必要です。ゲームの終盤でこんなに道場をロードしようとしたことは今までなかったので、率直に言ってどのように乗りこなすのか興味があります。

とにかく頑張ってください。

于 2013-01-11T21:58:18.447 に答える