0

私はこれまでRequireJSを使用したことがないので、助けていただければ幸いです。私は次のHTMLを持っています:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" 
        data-main="CustomScripts/market-need" 
        src="CustomScripts/require.js"></script>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 1</title>
</head>
<body>
etc...
</body>
</html>

次のJavaScriptをで定義していCustomScripts/market-need.jsます。

(function(){
    requirejs.config({ baseUrl: 'CustomScripts' });

    require(['mndataservice'],
        function (mndataservice) {
            mndataservice.getListData();
        });
})();

そして、に保存された次のコードCustomScripts/mndataservice.js

define([], function () {
    function getListData() {
            alert("Hit");
        }

    return
    {
        getListData: getListData
    };
});

上記を実行するときはいつでも、がの行にmndataserviceヒットしたときには未定義です。これはある時点で機能しましたが、私と私は自分の人生で犯した誤りを見つけることができません。mndataservice.getListData();market-need.js

4

1 に答える 1

1

変更した場合:

function (mndataservice) {
    mndataservice.getListData();
});

に:

function (mndataservice) {
    this.mndataservice.getListData();
});

次に、mndataservice.jsの内容を次のように置き換えます。

var mndataservice = {
    getListData: function () {
        alert("Hit");
    }
};

私はそれがあなたのためにそれを修正すると思います。

アップデート:

mndataservice.jsを次のように変更するだけです。

define([], function () {
    return {
        getListData: function () {
            alert("Hit");
        }
    }
});

それを修正する必要があります。「これ」は追加しないでください。他の関数で。

アップデート

あなたの例がうまくいかなかった理由と私の例がうまくいった理由を尋ねた以下の質問のフォローアップ。あなたがうまくいかなかった理由-あなたのコードは実際にこれを行っています:

define([], function () {
    function getListData() {
            alert("Hit");
        }

    return;
    {
        getListData: getListData
    };
});

returnキーワードの直後のセミコロンに注意してください。コードには含まれていませんが、Javascriptの自動セミコロン挿入によって自動的に挿入されるため、オブジェクトではなく未定義が返されます。

開いた中括弧をreturn修正と同じ行まで移動します。

于 2012-09-25T20:42:06.047 に答える