2013-12-20 72 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