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>

我在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 回答