在CakePHP 2.1中:
在现在我的布局(即一个块)中添加一段Javascript 一次的最佳方法是什么?
View->addScript()
是deprecated?
修改
$this->Html->script()
(链接到JS文件)似乎跟踪重复的脚本,但$this->Html->scriptBlock()
(内联JS)没有。 : - (
答案 0 :(得分:2)
$this->Html->script('scriptname');
确保您的脚本位于webroot中的js文件夹中
答案 1 :(得分: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路由和文件(Cake方式)
最好的办法是为您的视图创建一个可以包含在$this->Html->script()
中的实际JS文件,但是如果您想将PHP代码集成到JS中,那就太烦人了。 Cake有一个非常棒的方法来创建特定于视图的JS脚本,它们似乎没有多少谈论(我无法弄清楚原因)。
只需将其添加到您的Config/routes.php
文件中:
Router::parseExtensions('js');
如果您只是在URL的末尾添加“.js”,那么Cake会自动为您的控制器操作寻找JS View。例如:
$this->Html->script('/users/profile.js')
查找View/Users/js/profile.ctp
然后,它使用JS布局提供服务。这很棒,因为您仍然可以访问Controller中设置的所有变量和数据。
现在......只是一个问题。默认的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