2

DojoによってロードされるEsriArgGisJavaScript APIを、を使用して使用しようとしています。このコードを統合する必要がある既存のモジュラーAMD/requirejsTypescriptアプリケーションがあります。最初のTSファイルの先頭に、いくつかのモジュールをインポートします。dojo.require

import tracer = module('../classes/trace');
import pubsub = module('../classes/pubsub');
import masker = module('../classes/masker');
// etc.

これは正常に機能していましたが、アプリケーション内の相対パスを解決する代わりにArcGisコードを追加したので、require.jsはEsriサイトからbaseUrlを取得し、次のものを読み込もうとします。

http://serverapi.arcgisonline.com/jsapi/arcgis/3.3/js/esri/classes/trace.js
// etc.

404応答の文字列とスクリプトエラーが発生します。

どうすればこれを修正できますか?

モジュールをロードする最初のドキュメントをロードする前に、htmlファイルの先頭にrequirejsbaseUrlを設定してみました。

 <script src="http://serverapi.arcgisonline.com/jsapi/arcgis/3.3"></script>
 <script type="text/javascript" src="/content/client/libs/require.js"></script> <!-- data-main="/content/client/hop/hop.app" -->
 <script type="text/ecmascript">
        require.config({
            baseUrl: "/Content/client/hop/"
        });
 </script>
 <script src="~/Content/client/hop/hop.app.js"></script>

しかし、これは失敗し、requireにメソッド構成がない例外をスローします。

(注:rcgis apiがロードシーケンスの最後になるように、htmlドキュメントの先頭の順序を逆にすると、逆の問題が発生します。ローカルファイルはすべて正常に機能しますが、dojoとマッピングapiは検索しているため失敗します。 argisサーバーで検索する必要がある場合の私のサイトに関連するパス)。

4

2 に答える 2

6

私はEsriのArcGISAPIを使用しているので、この正確な問題に遭遇しました。 dojoからのこのブログ投稿は、私を助けてくれました。

最初の問題は、dojoがrequirejsと同じように構成されていないことです。以前に定義されたdojoConfigを探して設定します。2つ目は、Esriのモジュールの読み込みはすべて、1つのベースパスを想定して設定されており、コードで別のベースパスが必要になることです。次のようなdojo構成が必要になります。

dojoConfig = {
    baseUrl: location.pathname.replace(/\/[^/]+$/, '') + '/Content/client/hop/',  // magic!
    packages: [
        {
            name: 'dojo',
            location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/dojo/dojo/"
        },
        {
            name: 'dojox',
            location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/dojo/dojox"
        },
        {
            name: 'esri',
            location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/esri"
        }
    ]
};

これは、ベースパスを現在のURLに追加したものを加えたものに戻し、esriのものがどこにあるかをdojoに通知することです。これらはすべて私が遭遇したパッケージですが、ロードされなかったために見逃した依存関係がある場合は、同様のエントリが必要になります。

遭遇する可能性のあるもう1つの問題は、スクリプトをfile://としてローカルにロードすることに慣れている場合、別のドメインのdojoがfile://にアクセスしようとし、ブラウザがそれをシャットダウンすることです。今後はローカルhttpサーバーでテストする必要があります。WindowsではHFSを好み、LinuxではPythonを使用すると簡単になります。

これがお役に立てば幸いです。

于 2013-03-13T16:24:47.137 に答える
1

2つの間の競合のために、requirejsと一緒にdojoを使用する際にいくつかの問題が発生しましたrequire()dojoバグ15616を確認する必要があります。ジェームズがすべての道場またはすべてのrequirejsを提案しているグーグルグループからのこのスレッドを見たいと思うかもしれません。

使用しているdojoのバージョンはわかりませんが、公開されている1.8にはないrequirejs / dojoに関連する変更があるため、ソースからチェックアウトすることをお勧めします。

唯一の問題がbaseUrlの競合によって引き起こされた404エラーである場合、回避策は、のようなパスをエイリアスし、それを機能するパス(絶対またはその他)に置き換えるファイルを作成すること.d.tsです../classes/trace

于 2013-03-13T16:15:52.980 に答える