无法使Cake PHP JsHelper工作

时间:2012-10-17 12:13:27

标签: cakephp cakephp-2.0

在这个问题的第一道障碍中,我似乎被打败了,我似乎无法在蛋糕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(){});

我错过了什么吗?

3 个答案:

答案 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文件的末尾,它应该可以正常工作