RequireJS - 必需的项始终返回undefined

时间:2012-09-25 19:49:18

标签: requirejs

我之前从未使用过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中定义了以下JavaScript。

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

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

以下代码保存在CustomScripts/mndataservice.js

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

    return
    {
        getListData: getListData
    };
});

每当我执行上述操作时,mndataservicemndataservice.getListData();中遇到market-need.js行时都未定义。这在某一点上起作用,我和我都找不到我为我的生活所犯的错误。

1 个答案:

答案 0 :(得分: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 Automatic Semicolon Insertion自动插入,导致它返回 undefined 而不是对象。

将开放的大括号移动到与return相同的行,修复它!