質問

次の HTML を使用して、Google のホスティングから Dojo をロードしています。

<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("dojo", "1.1.1");</script>
<script type="text/javascript">
dojo.require("dojox.gfx");
...

これにより、requre 行で dojox.gfx が未定義のようなエラーが発生します。これを機能させる方法はありますか、それとも Google は dojox 拡張機能をサポートしていないのでしょうか?

あるいは、標準の Dojo リリースに使用できる別の一般的なホストはありますか?

役に立ちましたか?

解決

<script> タグから .js ファイルを直接参照する場合とは異なります (Google JS API もこれをサポートしていることに注意してください。 ここ)、google.load は同期していません。これは、コードが google.load に到達すると、Dojo が完全にロードされるまで待機せずに解析を続けることを意味します。dojo.require 行に直接進み、そこで失敗します。 道場 オブジェクトは未定義になります。

解決策 (直接 <script> タグを使用したくない場合) は、dojo を参照するすべてのコードを 始める 関数を作成し、次のようにしてコールバックとして設定します。

google.load("dojo", "1.1.1", {callback: start});

function start() {
    dojo.require("dojox.gfx");
    ...
}

または

google.setOnLoadCallback(start);
google.load("dojo", "1.1.1");

function start() {
    dojo.require("dojox.gfx");
    ...
}

他のヒント

もっと良い質問は、「なぜそうしたいのですか?」です。ローカルホスト上で開発している場合は相対パスを使用し、インターネットに接続されたサーバー上で開発している場合は、その上に Dojo ファイルを貼り付けます。

また、次の事項に違反していないことを確認してください。 同一生成元ポリシー

Google がインポートされたライブラリの名前空間になると思います。試す: google.dojo.require.

おお!また、以下で指摘するように、関数を直接呼び出す代わりに google.setOnLoadCallback を使用することを忘れないでください。

dojox は実質的にメンテナンスされていないため、dojo-2 から削除される予定です。dojox のほとんどのウィジェットには大きな問題があり、良い点はほんのわずかです。

私見では、dojo は自己ホスト型であるべきです。なぜなら、上書きする必要があるものは常にあるからです。たとえば、この dojox.gfx には修正が必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top