我文件的第一行如下所示:
define(['plugins / http','durandal / app','knockout','plugins / ajax','plugins / formatters'],函数(http,app,ko,ajax,formatters){
我的一些AMD模块加载得很好,但有些没有,在本例中,formatters参数未定义。
控制台中没有显示错误,并且在同一个插件文件夹中有一个formatters.js文件,其他插件工作正常。
我该如何调试?当我在formatters.js中放置断点时它正在运行,那么为什么参数未定义?
我剥离了我的格式化程序js所以它几乎没有任何内容,只有一个函数,它仍然不起作用:
define(['knockout'], function (ko) {
'use strict';
return {
//convert to number
rawNumber: function (val) {
if (val == null)
return 0;
else
return Number(ko.utils.unwrapObservable(val).toString().replace(/[^\d\.\-]/g, ''));
}
};
});
我的模块或者我的durandal配置有什么问题,或者是什么,这是否发生在其他任何模块未定义的模块上?这意味着什么?
请帮忙。谢谢!
答案 0 :(得分:0)
通常当我面对AMD模块的这个问题时,因为我有两个相互引用的模块。在这种情况下,第一个模块在第二个模块的上下文中是未定义的,因为它还没有完成加载,但是第二个模块很好地加载到第一个模块中,因为它在完成加载之前不会解析别名。
示例 -
module = plugins / moduleOne
define(['plugins/moduleTwo'], function (hey) {
console.log(moduleTwo);
});
module = plugins / moduleTwo
define(['plugins/moduleOne'], function (hey) {
console.log(moduleOne);
});
在这种情况下,moduleTwo正确解析但是moduleOne未定义。要解决这个问题,您可以在第二个模块中使用require语句 -
function checkModule() {
if (!moduleOne) {
moduleOne = require('plugins/moduleOne');
}
}
然后,您可以在激活第二个模块之后但在尝试引用moduleOne -
之前调用此方法var moduleOne;
checkModule();
moduleOne.doSomething();