在 CakePHP 2.1 中:
现在不推荐
将 JavaScript 片段一次添加到我的布局(即块)中
的最佳方法View->addScript()
是什么?
编辑:(
$this->Html->script()
链接到 JS 文件)似乎跟踪重复的脚本,
但$this->Html->scriptBlock()
(内联 JS)没有。:-(
在 CakePHP 2.1 中:
现在不推荐
将 JavaScript 片段一次添加到我的布局(即块)中
的最佳方法View->addScript()
是什么?
编辑:(
$this->Html->script()
链接到 JS 文件)似乎跟踪重复的脚本,
但$this->Html->scriptBlock()
(内联 JS)没有。:-(
您可以做的几件事:
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
$this->Html->script('scriptname');
并确保您的脚本位于 webroot 的 js 文件夹中