12

我在尝试使用headScript()->appendFile('file name')Zend 附加 javascript 文件时遇到问题。我有这样的布局设置:

    <?= $this->headScript()
    ->prependScript( 'BASE_URL = "' . $this->baseUrl() . '";' )
    ->appendFile( $this->baseUrl('js/lib/jquery/jquery-1.4.2.min.js') )
    ->appendFile( $this->baseUrl('js/admin.js') );

?>

然后,在我的控制器中,我试图仅为此页面附加一个额外的 js 文件,例如:

    $this->view->headScript()->appendFile( 'another/js/file.js' );

此文件需要附加到布局中已设置的内容。但是,此文件会在其他“appendFile”文件之前添加。我也试过

$this->headScript()->offsetSetFile(999, '/js/myfuncs.js');

但这仍然会在其他文件之前添加文件。这不是我期望的工作方式,尤其是在使用 offsetSetFile 方法时。如何 在其他文件之后添加此文件?谢谢。

4

6 回答 6

21

答案是headScript()->prependFile在 layout.phtml 和headScript()->appendFile视图中使用。

于 2010-12-07T13:46:12.093 回答
2

我知道这是一个迟到的答案,但是!

如果您执行 appendFile 或 appendScript 将使用下一个可用索引。因此

$this->headScript()->offsetSetFile(50, 'file');
$this->headScript()->appendFile('file2');

相当于

$this->headScript()->offsetSetFile(50, 'file');
$this->headScript()->offsetSetFile(51, 'file2');

还需要注意的是,控制器代码在视图/布局代码之前首先被执行。因此,在您的情况下,您的附加实际上是使用 id 的 1000 和 1001。对此的快速解决方法是明确使用 offsetSetFile 进行所有附加。因此,布局中的代码如下所示:

<?= 
   $this->headScript()
      ->prependScript( 'BASE_URL = "' . $this->baseUrl() . '";' )
      ->offsetSetFile(500, $this->baseUrl('js/lib/jquery/jquery-1.4.2.min.js') )
      ->offsetSetFile(501, $this->baseUrl('js/admin.js') );
?>

我希望这对未来的谷歌用户有所帮助

于 2012-06-13T15:11:01.880 回答
1

我注意到,如果我“前置”布局中的所有文件,然后我可以在我的控制器中使用 appendFile,它会出现在它们之后。不幸的是,然后我必须在布局中以相反的顺序列出我的所有 JS 文件(因为它们会添加到自己前面)。我真的很想保持井井有条,并且能够附加到我的布局堆栈中。

于 2010-03-12T17:28:46.560 回答
0

http://zendframework.com/issues/browse/ZF-3282?focusedCommentId=23552&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-23552

最后一条评论给出了一个很好的解决方案,首先包含在顶部的布局中,然后在需要时打印,这样就可以了

于 2011-05-04T10:19:04.103 回答
0

实际上,您不需要获取 baseUrl,因为 ZF 已经为您完成了。你只需要注意你的路径。不要使用第一个斜线!否则 ZF 将返回远程地址。

只需使用'$this->_view->headLink()->appendStylesheet('css/main.css');'

于 2010-05-14T18:46:26.577 回答
0

如果在布局文件中添加前缀不够好,您可以在设置视图时将文件包含在引导程序中,或者如果您需要根据正在加载的模块添加前缀,则可以设置控制器插件。

// in your bootstrap
protected function _initHeadScript()
{
    $this->bootstrap('view');
    $view = $this->getResource('view');

    $view->headScript()->appendFile('another/js/file.js');
}

// as a plugin
class My_Plugin_HeadScriptPlugin extends Zend_Controller_Plugin_Abstract
{
    public function routeStartup(Zend_Controller_Request_Abstract $request)
    {
        $view = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view;

        if($request->getModuleName() == 'foo')
        {
            $view->headScript()->appendFile('another/js/file.js');
        }
    }
}
于 2010-03-12T17:47:11.453 回答