Zend 1.11.headScript()->captureStart() 内容应包含在最后


Zend 1.11. headScript()->captureStart() content should be included last

我们正在开发一个基于 Zend 1.11 的应用程序。在整体布局中,我们使用

$this->inlineScript()->appendFile(...)

以添加所有必需的全局库,例如 jQuery。

在某些单独的视图中,我们需要通过

<?php $this->inlineScript()->captureStart(); ?>
jQuery(document).ready((function() {
    alert('ping');
}));
<?php $this->inlineScript()->captureEnd(); ?>

这里的问题是:布局文件在视图之后处理,因此捕获的内容是库包含在 inlineScript 堆栈中的。因此,在 html 中,我们以在我们的视图特定脚本之前不加载 jQuery 的方式打印它们:

<script type="text/javascript">
//<!--
jQuery(document).ready((function() {
  alert('ping');
}));
//-->
</script>
<script type="text/javascript" src="http://.../js/jquery/jquery-1.11.2.min.js"></script>

我们没有找到任何解决方案,浏览Zend代码让HeadScript助手先打印包含,然后再打印内联脚本。有没有人知道如何让它工作(首先包括脚本引用和打印内联脚本)?

多谢本

哈,我应该更仔细地检查第一个代码示例。在您的布局中,您有:

$this->inlineScript()->appendFile(...)

然后你说你想要一个解决方案来"让 HeadScript 助手先打印包含,然后再打印内联脚本"。但是您目前没有使用 head 脚本助手(至少您的问题中的任何代码都没有)。

布局中的调用应为:

$this->headScript()->appendFile(...)

并且您将需要一个相应的调用来回显 head 脚本帮助程序的结果(在布局的<head>...</head>部分中)。如果您需要查看它的外观,文档中有几个示例。

然后,您可以保持其余的内联脚本调用不变,它应该都可以正常工作。

我知道这个问题很老了,但由于我在这里或 elswhere 找不到任何答案,我想分享我对这个问题的解决方案,它可能会帮助其他人有完全相同的问题。

自己正在寻找答案我们使用ZendX_JQuery视图助手 (ZendX_JQuery_View_Helper_JQuery) 在布局中包含 jquery ($this->jQuery()

它有一些很好的函数来添加JS文件,但也在包含jquery之后向HEAD添加脚本,如果在包含jquery js文件本身之后或之前调用脚本,则没有mather。

您的特定问题的解决方案将是:

<?php
    $this->jQuery()->javascriptCaptureStart();
    echo <<<JS
        $(document).ready(function() {
            alert('ping');
        });
    JS;
    $this->jQuery()->javascriptCaptureEnd();