如果我命名模块,则RequireJS依赖是未定义的

时间:2014-01-02 09:49:49

标签: requirejs durandal

我正在使用Durandal,我正在尝试将此模块用作另一个模块的依赖项:

define('Beer', function () {
    return function Beer (name, brewery) {
        this.name = name;
        this.brewery = brewery;
    };
});

在另一个模块中,我这样做:

define(['knockout', 'models/Beer'], function (ko, Beer) {
    return {
        displayName: 'Add',
        name: ko.observable(),
        brewery: ko.observable(),
        save: function () {
            var beer = new Beer(this.name(), this.brewery());
            console.log(beer);
        }
    }
});

我的javascript已加载,因为我在路径中定义了它(我在Firebug中检查过)。但是我的第二个模块中的Beer参数未定义。我不知道为什么,因为我的Beer模块确实返回了一些东西(它返回了函数)。我还能看到什么?我发现的大多数解决方案都是(第一个)模块没有返回任何东西,但我的确是。

更新 显然,当我删除我的啤酒模块的名称时,它可以工作:

define(function() {
    return function Beer (name, brewery) {
        // ...
    }
});

尽管this code似乎有用,但它并不适合我。谁能告诉我为什么?

1 个答案:

答案 0 :(得分:3)

您正在使用方法将命名模块与匿名模块混合。

如果您将模块命名为“Beer”,则需要使用名称,而不是路径:

require(['Beer'], function (Beer) {
    var a = new Beer();
});

如果从Beer模块中删除名称,则您有一个匿名模块,可以按路径加载:

require(['path/to/Beer'], function (Beer) {
    var a = new Beer();
}

编辑:您链接到的主题不使用RequireJS,即使它看起来很相似。