【问题标题】:RequireJS dependency is undefined if I name the module如果我命名模块,RequireJS 依赖项是未定义的
【发布时间】:2014-01-19 17:41:40
【问题描述】:

我正在使用 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 模块确实返回了一些东西(它返回了函数)。我还能看什么?我发现的大多数解决方案是(第一个)模块没有返回任何内容,但我的显然是。

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

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

尽管this code 似乎可以工作,但它不适合我。谁能告诉我为什么?

【问题讨论】:

    标签: requirejs durandal


    【解决方案1】:

    您在方法中将命名模块与匿名模块混合在一起。

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

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

    如果您从 Beer 模块中删除名称,您将拥有一个可以通过路径加载的匿名模块:

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多