如何在布局内容或视图中调用javascript函数

时间:2018-09-20 15:59:43

标签: javascript cakephp cakephp-3.0

我正在布局视图中调用javascript函数。我对不同的视图有一个通用的布局,但是特别是有2个视图,我想检查var data = ['bob', 'charli', 'kate'], l = data.length, lastIndex = -1, counter = 0; intervalID = setInterval(getRandom, 1000); function getRandom() { do { var r = Math.floor(Math.random() * l); } while (r === lastIndex); lastIndex = r; console.log('data: ' + data[r] + ' | random_number: ' + r); if(++counter === 5) { clearInterval(intervalID); } }。在布局中,我可以定义脚本,但它们可以在我的整个应用程序中使用,所以我只想在2个视图中提及它们。我可以制作2个javascript文件,并将它们包含在各自的视图中,但是我认为这不是一个好选择。

我将如何处理此问题?

我有两个视图screen widthmobile-view

2 个答案:

答案 0 :(得分:0)

选项1:

将JavaScript放入一个小的.js文件中,并使用echo $this->Html->script('...');将该文件包含在特定视图中

选项2:

创建一个包含JavaScript(echo $this->Html->scriptBlock('...');)的元素,并通过echo $this->element('...');从每个视图中引用该元素

答案 1 :(得分:0)

使用HtmlHelper,您可以缓冲JavaScript脚本块并将其输出到<head>或最好在<body>的末尾,如下所示:

您的视图

// Start a script block to be echoed at the end of the <body>
$this->Html->scriptStart(['block' => 'bottomScripts']);
echo "alert('Hi, it is JavaScript.');";
$this->Html->scriptEnd();

除非您输出在布局或视图中名为bottomScripts的块中缓冲的脚本和/或脚本块,否则什么都不会发生:

您的布局

    …
    <?= $this->fetch('bottomScripts'); ?>
    </body>
</html>