12

RequireJS AMD ローディング メソッドを使用してアプリケーションに取り組んでいます。

モジュールを構成ファイルから配列に動的に取得しています

var amd_modules = ["module1", "module2","module3"]

これでrequireJSコードができました

require(amd_modules, function(result) {
console.log("All modules loaded");
}

ここで、結果変数は「module1」である最初のモジュールを示します。function() 括弧内の変数にも他のモジュールを取得するにはどうすればよいですか。

たとえば、

require(amd_modules, function(module1, module2, module3) { //
}

動的変数の数は実行時までわからないため、上記のハードコーディングを記述できません。関数内でオブジェクトを動的にキャッチする方法を教えてください。

どうも

4

2 に答える 2

13

単に使用しますarguments

require(amd_modules, function() {
    console.log("All modules loaded");
    // arguments should now be an array of your required modules
    // in the same order you required them
});

ただし、そうする正当な理由がない限り、おそらくアプリケーションの設計方法を再考したいと思うでしょう。最上位レベルであっても、モジュールはシンプルでテスト可能でなければなりません。依存関係の数が大きく異なるということは、おそらくコールバック関数で多くのことをしようとしていることを示しています。各コード パスを独自のモジュールに分割し、代わりに最上位の依存関係のみをオンに切り替えます。コード内:

// Instead of this:
require(amd_modules, function() {
    console.log("All modules loaded");
    if (complex_condition_A) {
        var x = arguments[0],
                y = arguments[1],
                z = arguments[2];
        // Do things with x, y and z
    }
    else if (complex_condition_B) {
        var a = arguments[0],
                b = arguments[1];
        // Do things with a and b
    }
    else {
        // et cetera, et cetera, et cetera
    }
});


// Do this instead
var rootModule;
if (complex_condition_A) rootModule = "A";
else if (complex_condition_B) rootModule = "B";
else rootModule = "C";
require(rootModule, function(root) {
    // Root has the same API, regardless of which implementation it is
    // This might be as simple as an `init` method that does everything
    // or as complex as, say Facebook's API, but with different libraries
    // loaded depending on the platform the page is loaded on
    // (IE vs. Android for example).
});
于 2012-08-21T02:40:48.837 に答える
0

次のようなことを試してください:

define(function () {
    var ClassLoader = function () {
        var _construct = function () {
                return _public;
            },
            _loadClass = function (className, callback) {
                //
                require([className],
                    function (LoadedClass) {
                        callback(LoadedClass);
                    });
            },

            _public = {
                loadClass: _loadClass
            };
        return _construct();
    }
    return ClassLoader;
});
于 2014-11-28T11:02:46.793 に答える