6

私はrequire.jsを使用してモジュールをロードしようとしています.app.jsには次のものがあります:

require.config({
baseUrl: "js"
});


alert("hello world"); // for debugging

require(['eh2'], function(eh2) {
    alert("nothing here"); // for debugging
});

アプリケーションを実行すると、app.js がロードされているにもかかわらず、必要なモジュールがロードされません。「hello world」は実行されますが、「nothing here」は実行されません!

HTML ページのスクリプト タグは次のようになります。

<script type="text/javascript" src="js/lib/require.js" data-main="app"></script>

eh2.js は js フォルダーにあり、define ステートメントでラップされています。

define(["./screens/Screens"], function(screens) {
    return {
        // code here
    };
});

私は何を間違っていますか?おそらく、screens.jsの下にあるサブモジュールをロードするときに、require.jsがサイレントに失敗していますか?

Screens モジュールのコードは次のとおりです。

    define([ "screens/TitleScreen", "screens/GameScreen" ], function(titleScreen, gameScreen) {
    return {

        screenFuncs: {
            "TitleScreen" : titleScreen.TitleScreen,
            "GameScreen" : gameScreen.GameScreen,
        },

        buildScreen: function(data) {
            var func = screenFuncs[data.type];
            var screen = new func(data.params);
            return screen;
        },
    };
});

とにかく、定義呼び出しのパスは、私がいるjsファイルの現在の場所、またはapp.jsで定義されたルートに相対的である必要がありますか?

4

1 に答える 1

5

これを置き換えます:

define(["./screens/Screens"], function(screens) {
    ....
});

絶対パスバリアントのいずれか:

define(["screens/Screens"], function(screens) {
    ....
});

または使用:

define(function(require) {
    var screens = require("./screens/Screens");
    ....
});

ドキュメントから:

define() 内の相​​対モジュール名:

define() 関数呼び出し内で発生する可能性のある require("./relative/name") 呼び出しについては、相対名が正しく解決されるように、必ず依存関係として "require" を要求してください。

define(["require", "./relative/name"], function(require) {
    var mod = require("./relative/name");
});

または、さらに良いことに、CommonJS モジュールの翻訳で使用できる短縮された構文を使用します。

define(function(require) {
    var mod = require("./relative/name");
});
于 2012-10-26T02:05:13.260 に答える