0

在 CakePHP 2.1 中: 现在不推荐
将 JavaScript 片段一次添加到我的布局(即块)中 的最佳方法
View->addScript()是什么?

编辑:(
$this->Html->script()链接到 JS 文件)似乎跟踪重复的脚本,
$this->Html->scriptBlock()(内联 JS)没有。:-(

4

2 回答 2

2

您可以做的几件事:

1.寻找一个声明的变量(肮脏的解决方法)

如果您真的希望代码位于$this->Html->scriptBlock(),您可以定义/检查一个全局变量,以查看代码是否已经定义。例如:

if (!DEFINED('someVarName')) {
    // define the variable from now on
    DEFINE('someVarName', true);
    // add your block
    $this->Html->scriptBlock(...);
}

2.创建自定义JS路由和文件(蛋糕方式)

最好的办法是为您的视图创建一个可以包含在 JS 中的实际 JS 文件$this->Html->script(),但是如果您想将 PHP 代码集成到您的 JS 中,那就很烦人了。Cake 有一个很棒的方法来创建视图特定的 JS 脚本,他们似乎很少谈论(我不知道为什么)。

只需将其添加到您的Config/routes.php文件中:

Router::parseExtensions('js');

如果您只需将“.js”添加到 URL 的末尾,这将使 Cake 自动为您的控制器操作查找 JS 视图。例如:

$this->Html->script('/users/profile.js')寻找View/Users/js/profile.ctp

然后,它与 JS 布局一起提供服务。这太棒了,因为您仍然可以访问在控制器中设置的所有变量和数据。

现在……只有一个问题。默认的 JS 布局将内容包装在标签中。如果我们试图在外部包含我们的脚本,这并不好,例如:<script type="text/javascript" src="/users/profile.js"></script>.

我对这种方式的 JS 布局真的没有太多用处,但我可能会在某个时候使用,所以我只是编辑了布局文件以使其适应:

// app/View/Layouts/js/default.ctp
<? 
if (isset($this->request->params['ext']) && $this->request->params['ext']=='js') {
    echo $this->fetch('content'); 
} else {
?>
    <? echo $scripts_for_layout; ?>
    <script type="text/javascript"><?php echo $this->fetch('content'); ?></script>
<? } ?>

更多信息(虽然不多):http ://book.cakephp.org/2.0/en/development/routing.html#file-extensions

于 2013-10-10T21:52:54.140 回答
2
$this->Html->script('scriptname');

并确保您的脚本位于 webroot 的 js 文件夹中

于 2012-06-03T23:28:00.833 回答