4

是否可以删除以前这样添加的脚本?

$this->view->headScript()->appendFile("/js/my.js");

这里的情况是在我的Bootstrap.php几个 JavaScript 文件像上面的例子一样被附加,但是在一个特定的控制器中,我希望不加载一个特定的 JavaScript 文件。有没有办法在控制器启动期间将其删除?

我正在寻找这样的东西。

$this->view->headScript()->removeFile("/js/my.js");
4

2 回答 2

4

这有效,但实际上不是一个好习惯,而是出于特殊目的。我建议首先不要加载不需要的脚本。

随后可以使用类似这样的功能删除脚本。

/**
 * Removes a previously appended script file.
 * 
 * @param string $src The source path of the script file.
 * @return boolean Returns TRUE, if the removal has been a success.
 */
public function removeScript($src) {
    $headScriptContainer = Zend_View_Helper_Placeholder_Registry::getRegistry()
            ->getContainer("Zend_View_Helper_HeadScript");
    $iter = $headScriptContainer->getIterator();
    $success = FALSE;
    foreach ($iter as $k => $value) {
        if(strpos($value->attributes["src"], $src) !== FALSE) {
            $iter->offsetUnset($k);
            $success = TRUE;
        }
    }
    Zend_View_Helper_Placeholder_Registry::getRegistry()
            ->setContainer("Zend_View_Helper_HeadScript",$headScriptContainer);
    return $success;
}

请注意,strpos这里使用了该函数。这将删除$src其路径中的每个脚本。当然,您可以根据自己的需要进行更改。

于 2013-08-02T16:46:55.880 回答
0

这是一个老问题,但这里有一个替代方案:我使用了minifyHeadScript并更改了他的助手,添加了这个自定义函数:

/**
 * Removes all script file.
 *
 */
public function clearAllScripts(){
    $this->getContainer()->exchangeArray(array());
    $container = $this->getContainer();
    Zend_View_Helper_Placeholder_Registry::getRegistry()->setContainer("Zend_View_Helper_HeadScript", $container);
}
于 2015-08-25T20:24:36.007 回答