1

这可能是重复的,但我正在努力寻找同样的问题,当然也是答案。

我对 Cake (2) 中资产的处理方式有点不确定和困惑。我想在特定页面上包含一些 JS,而不是在应用程序的每个页面上,所以我假设我需要将它添加到我的控制器方法中?我找不到我会怎么做。我最接近的是 JsHelper,但这似乎更多地用于使用 PHP 构建 JS,而不仅仅是加载资产。

我很清楚我可以做到$this->Html->script('script'),但这在控制器中不起作用,仅在视图中起作用。

虽然现在不需要,但能够将变量传递给包含的 JavaScript 也会很有用。一个很好的例子可能是“编辑”屏幕上的 AJAX 请求:$.ajax({ url: "/pages/edit_ajax/<?= $page->id ?>" });

很高兴收到任何帮助。

4

1 回答 1

2

为此,您需要使用Blocks(前提是您使用的是 v2.1+)。

在您的布局文件中,您无疑会有一行$this->fetch('script')可以找到该script块并将其输出到您的布局中。

接下来,在Controller 操作的视图中,假设index()您将有一个匹配的视图index.ctp。在此视图中,您可以将脚本附加到script块中。

所以在看来,

<?php $this->append('script'); // we want to append to the script block ?>
<script>
$(function() {
  alert('Hey there, Im only on this page!');
})
</script>
<?php $this->end();?>

当您访问您的控制器操作时,您会看到这将被输出,希望在您的页面底部,以及您的其他 javascript。

当您在视图中附加脚本时,它只会在加载此视图时执行。

关于第二个问题,您可以将变量设置为控制器中的视图,然后将它们回显到您的 javascript 中。

// Controller
$this->set('jsVar', 'JavascriptInBlocks');

// View
<?php $this->append('script'); // we want to append to the script block ?>
<script>
$(function() {
  alert('Hey there <?php echo $jsVar;?>');
})
</script>
<?php $this->end();?>
于 2013-05-10T09:49:21.723 回答