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");

但不包含在 < script > 标签甚至 $(document).ready(function(){});

我错过了什么吗?

4

3 回答 3

2

普遍的共识是不要打扰使用 JsHelper,并且无论如何都可能在 Cake 3 中被删除。

我会放在echo $this->Js->writeBuffer();前面</body>

我不确定确切的工作原理,但我认为你的 JS 正在使用,echo因为它在你的中间输出view,所以当页面加载时,它是alerts. (JS 将在您的 HTML 输出的中间)而不是在<head>或之前</body>

writeBuffer处理视图文件之前被调用;所以你的viewjs 不会被添加到缓冲区中。然而,我可能是不正确的。

于 2012-10-17T12:23:07.673 回答
2

老实说,JsHelper 毫无用处。我什至没有正确地打扰它,我只是像往常一样在我的网站中包含 JavaScript,但使用 Cake 的方法将其保留在框架内。

示例布局将包含 jQuery,<head>如下所示:

应用程序/视图/布局/default.ctp

<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);

});
于 2012-10-17T16:50:24.833 回答
0

在每个 ctp 文件的末尾设置写缓冲区,它应该可以工作

于 2012-10-17T20:15:09.467 回答