对于我们的Code Igniter应用程序,我们在关闭正文标记之前加载了所有的javascript。
所以在我们的控制器中我们有
$this->load->view('head', $this->head);
$this->load->view('main_view_for_controller', $data);
$this->load->view('foot', $this->foot);
在脚视图中,我们有一堆<script src="master.js"></script>
标签。
这些包括
现在这很有效,直到你认为JS仅用于特定页面或内联js 你不能只是将你的javascript转储到页面的任何地方,因为它通常会使用你在底部加载的部分和部分。
所以我现在所做的是,
我有/application/views/js/
,我会有login.php
login.php
可能包含例如。
<script>
$(function(){
var user_id = <?php echo $this->user->get('id'); ?>;
var return = '<?php echo $return_url; ?>';
$('#login form').submit(function(){[...]});
$('#login .facebook').click(function(){[...]});
});
</script>
所以在我的控制器中我会打电话给
$this->foot['js'][] = javascript('login', array('return_url' => '/users'));
//source of function javascript() from inside a helper
function javascript($file, $config = array()){
return $this->load->view('js/'.$file, $config, true);
}
然后在我的脚视图中,在所有其他文件(在prod env上合并到一个文件然后缩小)之后我有
foreach($js as $jsOut) echo $jsOut;
只是吐出所有的javascript。
这是最好的方法吗?或者,还有更好的方法? 这看起来有点乱......
答案 0 :(得分:0)
一个好主意可能是使用页面段来确定要包含的脚本。您可以定义脚本以及它们所属的页面,而不是必须始终填充数组,然后只需检查页面段以确定要包含的JS脚本。阅读URI类here的文档。
所以在你的包含中你会做这样的事情。
<?php if ( $this->$this->uri->rsegment(2) == 'login' ): ?>
// Your login page specific scripts here
<?php endif; ?>
<?php if ( $this->$this->uri->rsegment(2) == 'home' ): ?>
// Your homepage specific scripts here
<?php endif; ?>
将数字2替换为与您所在页面相关的任何分段。