2012-08-11 63 views
0

我正在爲一個多頁面應用程序使用requirejs。我對主文件的執行順序有一個奇怪的問題。這是我的設置。requirejs,multipage,奇怪的執行順序

在我所有的html頁面(這主要有所有被我的所有頁面都需要的通用js文件)

然後在每一頁上(比如page1.html):

<script data-main="main" src="require.js" /> 
<script> 
require(['require','main'],function(require) { 
     require(['main-library']); 
}); 
</script> 

我main.js樣子:

require.config({ 
    paths:{ 
     'lib':'../lib', 
     'jquery': '../lib/jquery/jquery-1.7.1.min', 
     'jquery.iframe-transport' : '../lib/jquery.iframe-transport.min.js' 
    }, 
    deps:['jquery','jquery-ui'], 
    shim: { 
     <other shim files> 
    }, 
}); 

require([<list of all other dependencies>], function() { 
}); 

和主library.js樣子:

define('main-library', 
    ['main', 
    'jquery.iframe-transport', 
    <other dependencies> 
    ], 
    function() { 
    } 
); 

我的期望: 是否「main-library」不會開始加載,直到「main」和main中指定的所有依賴項未加載。我期望這一點,因爲我需要在每個頁面上嵌套的require調用「main-library」。往上看。

問題: 當我的page1.html加載時,它看起來像main-library.js開始加載甚至在main.js加載完成之前,主庫無法獲得require.config,因此路徑因爲依賴關係不被它看到。

我在做什麼錯?

回答

0

回答我自己的問題。這實際上是另一個要求在page1.html中再次加載「主庫」的要求。所以我有這樣的東西:

<script data-main="main" src="require.js" /> 
<script> 
require(['require','main'],function(require) { 
    require(['main-library']); 
}); 
</script> 
... 
... Other html ... 
... 
<script> 
require(['main-library'],function(require) { 
    //do something. 
}); 
</script> 

這對主要庫的第二個要求是無法找到路徑。用主要工作包裝要求。

+0

你現在可以從詹姆斯的項目中看到你如何去做這件事。我認爲我的方法和詹姆斯解釋過的類似,但是他是requirejs的作者:) [example-multipage](https://github.com/requirejs/example-multipage) – 2015-01-24 00:09:50