1

同時に拡張機能を許可するrequire.jsを使用するアプリがあり、これらの拡張機能のjsは別のパスから提供されます。したがって、構成には次のものがあります。

var require = {
  baseUrl : '/app/js/modules/'
}

ただし、内線番号は から提供され/extension/foo-extension/js/modules/ます。data-module="foo/bar"また、拡張機能は動的であり、そのモジュールをロードするために取得した を使用するページに HTML を挿入します。

理想的には、次のモジュールのロードを baseUrl 内にスコープする require.js のコンテキストを渡したり設定したりできます/extension/foo-extension/js/modules/。私が知る限り、foo-extension からrequire('/extension/foo-extension/js/modules/foo/bar')ロードする必要があります。foo/bar

パス/コンテキストの設定を処理する必要がある場所を想像するための擬似コードを次に示します。

define(['some-dep'], function(SomeDep) {
    $.get('somepage', function(html) {
        var extension = html.data('extension'); // "foo/bar"
        var extensionBase = html.data('extensionBase'); // extension/foo-extension/js/modules/

        // This is where we need to readjust require to use the base path for any foo module
    });
});

絶対パスルートを使用することから、この部分に対する別の解決策はありますか?

4

2 に答える 2

4

requirejs.config() は後でいつでも呼び出すことができ、ローダーは構成をまとめてマージします。したがって、「拡張機能」のパス構成に何を使用するかがわかるまで待ってから、別の requirejs.config() 呼び出しを介して設定し、そのパスで拡張機能をロードするだけで十分です。

于 2012-08-28T17:27:51.380 に答える
2

「パス」構成オプションを使用したいようです。例:

var require = {
  baseUrl : '/app/js/modules',
  paths   : {
    'extension' : '/extension/foo-extension/js/modules'  
  }
};

require('extension/foo/bar')次に、単に呼び出してロードすることができます/app/js/modules/extension/foo-extension/js/modules/foo/bar.js

于 2012-08-28T06:29:28.440 に答える