在这个问题的第一道障碍中,我似乎被打败了,我似乎无法在蛋糕PHP中获得基本的“Hello world”。
在/app/Controller/MyController.php我有:
public $helpers = array('Js' => array('Jquery'), 'Html', 'Form');
public $components = array('RequestHandler');
在/app/View/Layouts/default.ctp我有:
echo $this->Html->script('//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js');
echo $this->fetch('script');
echo $this->Js->writeBuffer();
?></head>
在/app/View/My/index.ctp我有:
$this->Js->alert('HelloWorld');
但我没有收到警报!如果我尝试:
echo $this->Js->alert('HelloWorld');
它打印到浏览器:(双引号而不是键入的单引号!?)
alert("HelloWorld");
但未包含在&lt;脚本&gt;标签甚至$(文件).ready(function(){});
我错过了什么吗?
答案 0 :(得分:2)
普遍的共识是不要使用JsHelper,并且在任何情况下很可能在Cake 3中删除。
我会将echo $this->Js->writeBuffer();
放在</body>
我不确定具体的工作方式,但我认为你的JS正在使用echo
,因为它是在view
的中间输出的,所以当页面加载,它alerts
。 (JS将位于HTML输出的中间)而不是<head>
或</body>
之前
在处理视图文件之前调用writeBuffer
;所以你的view
js没有被添加到缓冲区。但我可能不正确。
答案 1 :(得分:2)
JsHelper说实话是没用的。我甚至没有理解它,我只是像往常一样在我的网站中包含JavaScript,但使用Cake的方法将其保留在框架内。
示例布局会在<head>
中包含jQuery,如下所示:
应用/视图/布局/ default.thtml中强>
<head>
<?php
// Include jQuery
echo $this->Html->script('jquery-1.8.2.min');
// Want to send some glabal values to your scripts?
$this->Js->set(array(
'TEST' => 'Hello World',
'ROOT' => $this->Html->url( '/', true)
));
echo $this->Js->writeBuffer(array('onDomReady' => false));
// Include any other scripts you've set
echo $this->fetch('script');
?>
</head>
然后在您的视图中,您可能希望包含该页面的特定脚本:
应用/视图/页/ test.ctp 强>
<?php echo $this->Html->script('test.js'); ?>
你只需将所有JavaScript保存在外部脚本中:
应用/ webroot的/ JS / test.js 强>
$(document).ready(function() {
/**
* Alert the value we set in our layout. All JS vars that have been
* set are available in your JavaScript via the window.app object.
*/
alert(window.app.TEST + ' sent from ' + window.app.ROOT);
});
答案 2 :(得分:0)
将写缓冲区设置在每个ctp文件的末尾,它应该可以正常工作