在 CakePHP 中,现在 View->addScript() 已被弃用,我如何向我的布局添加脚本*一次*
In CakePHP, how do I add a script *once only* to my layout now that View->addScript() is deprecated?
In CakePHP 2.1:
现在只向我的布局(即一个块)添加一段 Javascript 的最佳方法是什么
View->addScript()
被弃用了?
编辑:
$this->Html->script()
(链接到JS文件)似乎可以跟踪重复的脚本,
但$this->Html->scriptBlock()
(内联JS)没有。
$this->Html->script('scriptname');
并确保您的脚本位于 webroot 的 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文件,该文件可以包含在$this->Html->script()
中,但是如果您想将PHP代码集成到JS中,那就很烦人了。Cake 有一种很棒的方法来创建特定于视图的 JS 脚本,他们似乎很少谈论(我不知道为什么)。
只需将其添加到您的Config/routes.php
文件中:
Router::parseExtensions('js');
这使得 Cake 会自动为您的控制器操作查找 JS 视图,如果您只是在 URL 末尾添加".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
- Javascript返回值只在循环中返回一次
- Jquery FadeIn FadeOut 只工作一次
- Javascript html每点击一次就会更改url
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- jQuery滚动功能只工作一次
- 刷新导致我的帖子“;张贴“;再一次
- 引导程序崩溃一次只能看到一个
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- 加载器组件仅加载一次
- 根据Angular.JS上一次的内容禁用选择
- 一次又一次地在新的和相同的选项卡中打开一个url
- 只在宽度以下和宽度以上各准备一次
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- Angularjs:空对象,当只有一次点击时
- 在Angular应用程序中每个帖子投票一次
- 主干模型更改事件只触发一次
- 使用每500ms运行一次的jquery函数是个好主意吗
- For循环在Jquery中只运行一次
- 在 CakePHP 中,现在 View->addScript() 已被弃用,我如何向我的布局添加脚本*一次*