2013-08-22 56 views
3

您好我正在使用requirejs將我的JavaScript代碼組織到AMD模塊中,我正在構建一個非單頁網站,現在使用codeigniter,我做的是我有一個默認的佈局HTML文件,我總是調用渲染身體的動態內容,所以我的腳本調用requirejs並具有data-main屬性編碼在我的佈局HTML頁面上。RequireJS根據ROOT URL + baseUrl +模塊路徑加載模塊

<script data-main="<?=base_url('assets/js/main.js');?>" src="<?=base_url('assets/js/require.js');?>"></script> 

和我的main.js看起來像這樣。

requirejs.config({ 
baseUrl: "assets/js", 
paths: { 
    jquery: 'vendor/jquery', 

    bootstrap: 'vendor/bootstrap', 

    datatables: 'vendor/jquery.dataTables' 

}, 

shim: { 
    jquery: { exports: '$' }, 
    datatables: { deps: ['jquery'] } 
} 
}); 

requirejs(['bootstrap','datatables'], function(){ 

}) 

所以當我在我的網址「localhost/ci-project /」上輸入時,它會將佈局頁面與動態主體一起加載。在這種情況下,它工作正常。 sicne requirejs會正確渲染路徑「localhost/ci-project/assets/js/vendor/[js file/module]」

但是當我更改URL時,'localhost/ci-project/welcome/admin 」。加載模塊的要求是將baseUrl +模塊路徑連接到當前URL(在本例中爲「localhost/ci-project/welcome/admin」),結果如下所示:

'localhost/ci -project/welcome/admin/assets/js/vendor/[module]'這是錯誤的。

那麼我怎樣才能配置requirejs總是加載從根url,然後連接baseUrl值與每個模塊的路徑一起?

回答

3

解決此問題的方法是從服務器端變量輸出baseUrl

在你的PHP頁面:

<script> 
var require = { 
    baseUrl: '<?= base_url(); ?>' // Or whatever outputs the full path to your site root 
}; 
</script> 
<script data-main="<?=base_url('assets/js/main.js');?>" src="<?=base_url('assets/js/require.js');?>"></script> 

創建require對象RequireJS加載之前允許您定義將被自動拾取的配置選項。

再次調用require.config()main.js裏面可以了,它只會添加額外的配置選項,但一定要從那裏刪除baseUrl

1

西蒙的答案上面的幫助,當我有導航到具有參數的路線問題 - 相對路徑到基地url出錯。我正在使用asp .net mvc,但解決方案完全一樣: (_Layout.cshtml)

<script> 
    var require = { 
     // by default, load any module IDs from 
     baseUrl: '@Url.Content("~/Scripts/lib")' 
} 
</script> 
<script data-main="@Url.Content("~/Scripts/application/app.js")" src="@Url.Content("~/Scripts/lib/require.js")"></script>