在我的codeigniter应用程序中,我创建了一个header.php和一个footer.php。当我加载视图时,我在控制器中执行以下操作:
$this->load->view('includes/template', $data);
template.php文件如下所示:
$this->load->view('includes/header');
$this->load->view($main_content);
$this->load->view('includes/footer');
到目前为止,这一直都很顺利。但是,我想将所有加载javascript文件的代码从标题移动到页脚 - 以帮助我的页面加载更快。像这样的东西就是我所说的:
<script src="<?php echo base_url('assets/js/jquery-1.8.1.min.js')?>"></script>
<script src="<?php echo base_url('assets/js/jquery-ui-1.8.23.custom.min.js')?>"></script>
<script src="<?php echo base_url('assets/js/jquery.qtip-1.0.0-rc3.min.js')?>"></script>
问题是,在组成“main_content”的文件中,如果我有javascript逻辑,它就不再有效了。
例如,假设我有以下视图作为“main_content”
<!-- DISPLAY RESULTS -->
<div class="row-fluid">
<div class="span12 visible-desktop visible-tablet" id="l1locations">
<table id="switchrecords" name="switchrecords" class="table table-bordered">
</table>
</div>
<div class="span12 visible-phone" id="l1locations">
<div id="mobileswitchrecords"></div>
</div>
</div>
<button class="btn search">Search</button>
<script>
$(document).ready(function(){
$('#search').show();
$('.search').live('click',function(){
etc... logic that dynamically fills in the table
});
</script>
我认为这个逻辑仍然可以工作,因为它在document.ready()中,并且文档就绪在加载所有文件之前不会触发。 但我一定是错的,因为我的代码不再有效。 我可以在标题中包含主jquery包含文件,并在页脚中包含所有其他js文件。但任何其他建议将不胜感激。
编辑1
请注意,目前,每个视图都有不同的内嵌javascript。有些页面会调用很多ajax,其他页面只有简单的脚本。无论如何,对于我来说,将所有内联javascript移动到文件中是可以的,但页脚如何知道要包含哪个js文件?我不想一直包含所有javascript,因为js代码仅适用于特定页面。
答案 0 :(得分:1)
$(document).ready
是jQuery。你试图在它加载之前使用jQuery,所以它会失败。您可以尝试将所有core-JS包含移动到每个视图文件的底部,在特定视图JS之前,以及包含其他footer-y内容的页脚。这样,您的JS仍然在底部(在内容之后)加载,也在视图特定代码之前加载。