【问题标题】:Load Javascript files in CakePHP Layout at "bottom"在“底部”的 CakePHP 布局中加载 Javascript 文件
【发布时间】:2012-12-14 13:57:15
【问题描述】:

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

由于在 HTML 头部加载 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 时执行它?那能帮我吗?

【问题讨论】:

    标签: php cakephp cakephp-2.2


    【解决方案1】:

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

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

    这种方法可以让您将echo $this-&gt;fetch('script') 保留在布局的&lt;head&gt; 中,以防您需要任何脚本在顶部。

    【讨论】:

    • 感谢您的回答。事实上,我已经在网络的某个地方找到了你的答案并将其集成,但这里肯定值得一提,因为它完成了答案。
    • 你的意思是最好不要在布局中加载任何js,只在layour的末尾获取它们并在每个视图中调用你需要的js吗?
    【解决方案2】:

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

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

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

    echo $this->fetch('script');
    

    【讨论】:

    • 我认为这是一个很好的解决方案,如果我将所有内联代码放在 Javascript 文件的视图中,我认为它可以工作。谢谢你的建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2019-03-30
    相关资源
    最近更新 更多