2016-05-18 45 views
1

我在項目中有很多js文件,我想創建一個require函數來測試一個文件是否已經加載。我知道requirejs,但我希望做一些小而簡單的事情。下面我的功能的問題是它會在撥打requires時發出錯誤widgets is undefined。我怎樣才能防止呢?需要從另一個文件中定義對象

function requires(obj, fn){ 
     if(typeof obj === 'undefined'){ 
      log('obj undefined'); 
      window.setTimeout(function(){requires(obj, fn)}, 10); 
      //10 ms is arbitrary, i'm not a fan of that 
     }else{ 
      fn(); 
     } 
    } 

//example using it 
requires(widgets, function(){ 
    window.widgets.showUserDlg = function showUserDlg(data) { 
      ... 
     } 
    } 
}); 
+0

它轉到'else'條件,然後'fn()'會在'widgets'中運行你的回調。你需要首先通過AJAX獲取'widgets'文件? –

+0

你可以不**傳遞一個未定義的參數給一個函數,它總會拋出一個錯誤,參見[這裏](http://stackoverflow.com/a/16942951/3880255),這就是你在做什麼,這個將永遠不會工作。您必須根據您設置的環境來調整代碼。 –

回答

1

如果widgets是一個全局變量或對象屬性,你可以把它作爲一個字符串名稱,如

requires('widgets', function() { /* ... */ }); 

,然後用window或對象數組檢查:

function requires(obj, fn){ 
    if(typeof window[obj] === 'undefined'){ // or container[obj] 
     log('obj undefined'); 
     window.setTimeout(function(){requires(obj, fn)}, 10); 
     //10 ms is arbitrary, i'm not a fan of that 
    }else{ 
     fn(); 
    } 
} 
+0

做**從來沒有**污染全球命名空間.. –

+0

@ClemensHimmer我已經增加了另一種可能性使用對象 – Goover

+0

這是一個很好的工作,謝謝。 – Ced

相關問題