headScript() - > appendFile与headScript() - > prependFile具有相同的行为

时间:2013-08-10 13:01:50

标签: javascript zend-framework

我遇到了一些问题。 appendFile似乎从视图中不起作用。如果我将其更改为prependFile,它具有相同的行为。

layout.phtml

<!doctype html>
<html lang="en" dir="ltr">
    <head>
        <?php
        $this->headScript()->appendFile('http://code.jquery.com/ui/1.10.3/jquery-ui.js'); 
        $this->headScript()->appendFile('/theme/javascripts/application.js'); 
        $this->headScript()->appendFile('/js/own.js'); 
        ?>
    </head>
    <body>
        <?php echo $this->layout()->content; ?>
        <?php echo $this->headScript() ?> 
    </body>
</html>

index.phtml

<?php $this->headScript()->appendFile('/js/another.js') ?>

输出

<!doctype html>
<html lang="en" dir="ltr">
<head>

</head>
<body>      
    <script type="text/javascript" src="/js/another.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
    <script type="text/javascript" src="/theme/javascripts/application.js"></script>
    <script type="text/javascript" src="/js/own.js"></script> 
</body>
</html>

你可以看到/js/another.js将成为第一个js。这不是我想要的,我想把它作为最后一个。谁知道什么是错的?

2 个答案:

答案 0 :(得分:0)

/js/another.js位于开头,因为首先调用layout.phtml,然后当您调用<?php echo $this->layout()->content; ?>时,它会调用index.phtml文件。

现在你的代码中有:
    <?php echo $this->layout()->content; ?>
        <?php echo $this->headScript() ?>

所以它实际上调用了layout(),因此调用了index.phtml,然后调用headscript()来调用其余的js。它附加了index.phtml中提到的headscript(),然后从<!doctype html> <html lang="en" dir="ltr"> <head> <?php $this->headScript()->appendFile('http://code.jquery.com/ui/1.10.3/jquery-ui.js'); $this->headScript()->appendFile('/theme/javascripts/application.js'); $this->headScript()->appendFile('/js/own.js'); ?> </head> <body> <?php echo $this->headScript() ?> <?php echo $this->layout()->content; ?> </body> </html> 附加其余内容。尝试相反的方式......

你应该尝试:

<HEAD>

理想情况下,您应该在{{1}}部分输出所有脚本。

答案 1 :(得分:0)

视图脚本在布局之前呈现,因此当您追加/js/another.js时,没有其他脚本,这就是为什么稍后由布局添加的脚本最终添加到脚本之后

您应该可以通过将布局中的所有appendFile()调用更改为prependFile()来实现所需的顺序。 (并且您可能需要撤销他们的订单,因为您现在正在预先处理。)执行顺序应为:

  • 查看脚本附加/js/another.js
  • 布局预先/js/own.js
  • 布局预先/theme/javascripts/application.js
  • 布局预先http://code.jquery.com/ui/1.10.3/jquery-ui.js

此外,您可能需要考虑使用内联脚本帮助程序(以相同的方式工作),因为在<body>中使用头脚本输出脚本可能会使处理代码的未来开发人员感到困惑。