1

こんにちは、requirejs でビルドされた js アプリケーションがあります。今、私は他の開発者からの外部ページを持っています。彼は自分のスクリプト、html、css、および私に接続されていない他のものをロードできます。彼のページに接続される私のモジュールの例:

require(['page', 'widgetGame', 'adDynamic'], function (Page, WidgetGame, AdDynamic) {
    function PageExternalGame (params) {
        var params = params || {}; 
        Page.call(this, params); // call super constructor.
    };

    PageExternalGame.prototype.gameLoadingComplete = function() {
        alert(111);
    };

    window.yepiExternalPageGame = new PageExternalGame();
    return PageExternalGame;
});

そしてここに彼のページの例:

<!DOCTYPE HTML>
<html lang="en"><head>
</head>
<body>
<div id='gameArea'>
<canvas id='canvas0' width='480' height='320' style="position: absolute; "></canvas>
</div>
<script data-main="../../YepiMobileNew/UI/js/pageExternalGame" src="http://requirejs.org/docs/release/2.1.14/minified/require.js"></script>
<script src='js/gamemin.js'></script>
<script>yepiExternalPageGame.gameLoadingComplete()</script>
</body>
</html>

彼のページで、彼は私のオブジェクト yepiExternalPageGame を呼び出します。このオブジェクトは、requirejs によってロードされます。しかし、彼がこのオブジェクトを呼び出すとき、require 自体は既にロードされていますが、クラス pageExternalGame はまだロードされていないため、彼が呼び出したときにこのオブジェクトは存在しません。それをどう扱うか?(彼の外側のスクリプトも私のオブジェクトを呼び出すことができます)。ありがとう。

4

1 に答える 1

0

まず、amd アプリを他のユーザーと共有する場合は、require.js を使用しないビルドを作成することをお勧めします。これにより、他の開発者が別のライブラリを追加してページ サイズを大きくする必要がなくなります。これは almond.js で行うことができます

しかし、あなたの質問に戻ります。

変化する

<script>yepiExternalPageGame.gameLoadingComplete()</script>

<script>
    require(['../../YepiMobileNew/UI/js/pageExternalGame'], function() {
        yepiExternalPageGame.gameLoadingComplete();
    });
</script>

それは役に立ちます。

于 2014-07-14T08:39:57.187 に答える