2013-12-20 70 views
0

我的文件的第一行是这样的:AMD模块不加载,不确定

定义([ '插件/ HTTP', '迪朗达尔/应用程序', '淘汰赛', '插件/ AJAX',“插件/格式化],功能(HTTP,应用程序,KO,AJAX,格式化){

我的一些AMD模块负载的就好了,但有的没有,在这个例子中,格式化参数是不确定的。

控制台中没有显示错误,并且在同一个插件文件夹中有一个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, '')); 
     } 
    }; 
}); 

是有毛病我模块,或与我迪朗达尔配置,或者什么,这发生在其他人的模块只是未定义?这意味着什么?

请帮忙。谢谢!

回答

0

通常当我用AMD模块来面对这个问题时,这是因为我有两个模块相互引用。在这种情况下,第一个模块在第二个模块的上下文中未定义,因为它尚未完成加载,但是第二个模块将加载到第一个模块中,因为它在加载完成之前不能解析别名。

实施例 -

模块=插件/ ModuleONE中

define(['plugins/moduleTwo'], function (hey) { 
    console.log(moduleTwo); 
}); 

模块=插件/ ModuleTWO中

define(['plugins/moduleOne'], function (hey) { 
    console.log(moduleOne); 
}); 

在这种情况下ModuleTWO中正确解析但ModuleONE中是不确定的。为了解决这个问题,你可以使用要求语句中的第二模块中 -

function checkModule() { 
    if (!moduleOne) { 
     moduleOne = require('plugins/moduleOne'); 
    } 
} 

然后之后你的第二个模块已经启动,你可以调用这个方法,但你尝试引用ModuleOne的前 -

var moduleOne; 
checkModule(); 
moduleOne.doSomething(); 
+0

这是很高兴知道,但是在这种情况下,两个模块都会引用knockout,但这就是关于它的原因,它们不会互相引用,所以必定有其他可能导致此行为的其他内容。 – pilavdzice

+0

我知道在某些情况下,如果模块中有语法错误,它不会抛出错误,它会忽略模块,是否因为正则表达式? – pilavdzice