11

目前,我有一个带有布局和很多视图的大型 CakePHP 应用程序。在布局中,我在头部加载大多数视图所需的 Javascript 文件。在视图本身中,我要么加载额外的 Javascript 文件(例如,加载仅在那里需要的库文件),要么在脚本标记中添加一些仅与此视图相关的 Javascript 代码,例如,如果我需要单击处理程序。

由于在 HTML head 中加载 Javascript 文件会阻止加载页面是一个众所周知的事实,因此我想在关闭 body 标签之前将它们放在底部。但如果我这样做,我的视图中加载内容的 Javascript 会中断,因为它不知道我加载的 Javascript 文件。我了解加载视图中的 Javascript 代码是在我的文件加载之前执行的。但是我该如何防止呢?

我目前在布局(以及其他任何地方)中使用 HTML Helper 来加载我的 JS 文件,如下所示:

<?php echo $this->Html->script('//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'); ?>

我使用 JS Helper 在页面末尾“输出” JS

<?php echo $this->Js->writeBuffer(); ?>

有没有办法可以在视图中附加我的 JS 代码,以便在我调用 writeBuffer 时执行它?那能帮我吗?

4

2 回答 2

20

从 CakePHP 2.1 版开始,您可以使用脚本块:

// in your view
$this->Html->script('filename', array('block' => 'scriptBottom'));

// in your layout
echo $this->fetch('scriptBottom');

这种方法使您可以保留布局,以防您在顶部需要任何脚本echo $this->fetch('script')<head>

于 2013-01-01T00:09:28.583 回答
13

在我看来,这就是我所做的:

echo $this->Html->script('filename', array('inline' => false));

这就是我在布局底部所做的:

echo $this->fetch('script');
于 2012-12-29T19:00:46.427 回答