0

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

布局.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>

索引.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。这不是我想要的,我想把它放在最后。有谁知道怎么了?

4

2 回答 2

0

视图脚本在布局之前渲染,所以当你 append 时/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>可能会使未来的开发人员在您的代码上工作感到困惑。

于 2013-08-10T16:36:37.120 回答
0

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

现在在您的代码中,您已经:
<?php echo $this->layout()->content; ?>
<?php echo $this->headScript() ?>

所以它实际上是调用 the layout(),因此调用 the index.phtml,然后调用headscript()the 其余部分。它附加了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>部分中输出所有脚本。

于 2013-08-10T13:50:55.707 回答