【问题标题】:In CakePHP, how do I add a script *once only* to my layout now that View->addScript() is deprecated?在 CakePHP 中,既然 View->addScript() 已被弃用,如何将脚本*一次*添加到我的布局中?
【发布时间】:2012-06-03 23:17:35
【问题描述】:

在 CakePHP 2.1 中:
现在将 Javascript 的 sn-p once only 添加到我的布局(即块)的最佳方法是什么
View->addScript()deprecated

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

【问题讨论】:

标签: javascript cakephp cakephp-2.1


【解决方案1】:
$this->Html->script('scriptname');

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

【讨论】:

  • 谢谢克里斯。你是对的...$this->Html->script()(链接到 JS 文件)似乎确实跟踪重复的脚本,但不幸的是$this->Html->scriptBlock()(内联 JS)没有。我实际上需要第二种选择。嗯……
【解决方案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 方式)

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

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

Router::parseExtensions('js');

如果您只需在 URL 的末尾添加“.js”,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多