我正在使用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似乎有用,但它并不适合我。谁能告诉我为什么?
答案 0 :(得分:3)
您正在使用方法将命名模块与匿名模块混合。
如果您将模块命名为“Beer”,则需要使用名称,而不是路径:
require(['Beer'], function (Beer) {
var a = new Beer();
});
如果从Beer模块中删除名称,则您有一个匿名模块,可以按路径加载:
require(['path/to/Beer'], function (Beer) {
var a = new Beer();
}
编辑:您链接到的主题不使用RequireJS,即使它看起来很相似。