嗨,我正在使用requirejs将我的javascript代码组织成AMD模块,我现在正在使用codeigniter构建一个非单一页面的网站,我所做的是我有一个默认的布局html文件,我总是调用这个文件来呈现主体的动态内容,所以我的脚本调用了requirejs并具有数据-主属性被编码在我的布局html页面上。
<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(){
})
因此,当我在url上输入"localhost/ci-project/“时,它将与动态主体一起加载布局页面。在这种情况下,它工作得很好。sicne需求将正确地呈现路径“localhost/ci-project/assets/js/供应商/js文件/模块”。
但是当我将URL更改为“localhost/ci-project/迎宾/admin”时。加载模块所需做的是将baseUrl +模块路径连接到当前的URL,在本例中为‘localhost/ci-project/迎宾/admin’,结束结果如下所示:
'localhost/ci-project/welcome/admin/assets/js/vendor/module‘,这是错误的。
那么,如何配置requirejs,使其始终从根url加载,然后将baseUrl值与每个模块的路径连接起来?
发布于 2013-08-22 03:48:46
解决这个问题的方法是从服务器端变量输出baseUrl
。
页面中的
<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
。
发布于 2015-01-07 18:22:00
当我遇到导航到带有参数的路径的问题时,Simon上面的答案有所帮助--基本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>
https://stackoverflow.com/questions/18374808
复制