这可能是重复的,但我很难找到同样的问题,当然也是答案。
我对Cake(2)中的资产处理方式有点不确定和困惑。我想在特定页面上包含一些JS,而不是在应用程序的每个页面上,所以我认为我需要将它添加到我的控制器方法中?我找不到我会怎么做。我接下来的是JsHelper,但这似乎更多的是使用PHP构建JS而不仅仅是加载资产。
我很清楚我可以$this->Html->script('script')
,但这在控制器中不起作用,只在视图中。
虽然现在不需要,但是能够将变量传递给包含的JavaScript也很有用。一个很好的例子可能是“编辑”屏幕上的AJAX请求:$.ajax({ url: "/pages/edit_ajax/<?= $page->id ?>" });
很高兴收到任何帮助。
答案 0 :(得分:2)
为了做到这一点,你需要使用Blocks(假设你在v2.1 +中)。
在布局文件中,毫无疑问会有一行$this->fetch('script')
,它会找到script
块并将其输出到您的布局中。
接下来,在控制器操作的视图中,假设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();?>