2013-04-11 83 views
3

我有一個用例,我必須根據某些條件加載AMD模塊,以便使用requirejs定義另一個模塊。使用requirejs選擇性加載AMD模塊

define(['module1'], 
    function(module1) 
    { 
     /*some code*/ 

     if (condition1) { 
     require(['module2'], 
      function() 
      { 
       /*some code*/ 
      } 
     )   
     } 
     else { 
     require(['module3'], 
      function() 
      { 
       /*some code*/ 
      } 
     )  
    } 
    return someObject; 
    }); 

我碰到this問題,並與全球和本地require糊塗了。
上述方法是否正確?

+0

它工作與否? – mpm 2013-04-11 08:54:52

+0

是的,雖然我在我的代碼中使用commonJS風格,但它可以工作。 var module2 = require('module2');'(''需要','模塊1'],函數(需要,模塊1)) var module2 = require 返回一些東西; }' – bitsbuffer 2013-04-15 08:22:20

+0

真的有用嗎?對我來說,它不工作,因爲之前module2沒有加載。我得到的錯誤:module2尚未加載上下文:_。使用require([])。這意味着它需要是assync。我該如何做同步?我第一次打電話給module2並獲取require(「module2」)。 – ccsakuweb 2013-05-08 11:42:19

回答

3

您應該使用「本地」require。本地要求將確保相對於「父」模塊的模塊被解析,

define(["require", "module1"], function(require, module1) { 
    require(['./relative/to/parent/not/necessarily/relative/to/baseUrl'], ...); 

並且該URL也相對於「父」模塊被解析。

define(["require", "module1"], function(require, module1) { 
    require.toUrl('./relative/to/parent/not/necessarily/relative/to/baseUrl') 
+0

我相信可以縮短爲'define(function(require){// ...})' – 2013-04-11 09:19:25

+0

是的,我認爲OP也需要導入'module1',所以也許這種格式不能用在這種情況下。我會更新我的答案,以便更明確。 – 2013-04-11 09:20:58

相關問題