0

私はこの最初のハードルで打ち負かされたようです.cake 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は正直言ってかなり役に立たない。私はそれをきちんと気にすることさえしません、私はいつものように私のサイトにJavaScriptを含めるだけですが、Cakeのメソッドを使ってそれをフレームワーク内に保ちます。

レイアウト例では、jQueryが次の<head>ように含まれています。

app / View / Layouts / 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>

次に、ビューに、そのページの特定のスクリプトを含めることができます。

app / View / Pages / test.ctp

<?php echo $this->Html->script('test.js'); ?>

そして、すべてのJavaScriptを通常どおり外部スクリプトに保持します。

app / 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 に答える
2

一般的なコンセンサスは、JsHelperを使用することを気にせず、いずれにせよ、Cake3で削除される可能性があります。

私はecho $this->Js->writeBuffer();前に置きます</body>

正確な動作はわかりませんが、JSは途中で出力されているため、動作していると思います。ページが読み込まれると、それが表示されます。(JSはHTML出力の途中になります)またはその前ではなくechoviewalerts<head></body>

writeBufferビューファイルが処理される前にが呼び出されています。そのため、viewjsはバッファに追加されません。しかし、私は間違っている可能性があります。

于 2012-10-17T12:23:07.673 に答える
0

各ctpファイルの最後に書き込みバッファを設定すると、機能するはずです

于 2012-10-17T20:15:09.467 に答える