0

file など、いくつかの関数を含むこの js ファイルがありますx.js

x.js同じ関数を 2 回記述しないように、関数を他のファイルで再利用する必要があります。「dojo/request/script」を試してみましたが、うまくいきません。

これらの関数をインポートする方法について何か提案はありますか?

4

1 に答える 1

2

理想的には、ファイルを AMD モジュールにする必要があります。たとえば、my/AB.jsこれが含まれている場合:

function f1(x) { /*..*/ }
function f2(y) { /*..*/ }

次のように書き換える必要があります。

define([], function() {
  return {
    f1: function(x) { /*..*/ },
    f2: function(y) { /*..*/ }
  }
});

次に、他の JavaScript ファイルで、それrequireをロードするために使用できます。

require(['my/AB'], function(AB) {
  AB.f1('foo');
  AB.f2('bar');
});

(に拡張子がないことに注意してください!).jsmy/AB

AB.jsこれには、関数がグローバル スコープに含まれなくなるという利点があります。つまり、関数が他の人の関数と衝突することはありません。また、Dojo ビルド システムを使用して、最適化され結合されたファイルを後でデプロイすることもできます。

ただし、これが常に可能であるとは限りません。おそらく、他の JS ファイルが依存してf1おりf2、グローバル スコープにあります。.jsしかし、拡張子を追加するだけで、AMD 以外の通常のファイルを Dojo のローダーでロードすることもできます。

require(['my/AB.js'], function() {
  window.f1('foo');
  window.f2('bar');
});

これらすべてのケースで、コードが というディレクトリにあると想定していることに注意してくださいmy。実際のディレクトリーの名前が何であれ、dojoConfig で Dojo ローダーにそのことを伝える必要があります。

<script type="text/javascript">
  var dojoConfig = {
    baseUrl: ".....",
    // your other config parameters,
    packages: [ 'my', '../folder/relative/to/baseUrl/my' ]
  };
</script>
<!-- your inclusion of dojo.js somewhere below this -->

PS: 実際には任意の場所から JS ファイルをロードすることもできます:

require(['http://example.com/js/my/AB.js'], function() {
  window.f1('foo');
  window.f2('bar');
});
于 2013-10-08T11:46:37.750 に答える