2012-10-17 61 views
0

我似乎在第一個關於此問題的第一個絆腳石上,似乎無法得到一個基本的「Hello world」在蛋糕PHP中進行。無法獲取Cake PHP JsHelper的工作

在/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 /查看/我的/ index.ctp我有:

$this->Js->alert('HelloWorld'); 

但我沒有收到警報!如果我嘗試:

echo $this->Js->alert('HelloWorld'); 

它打印出瀏覽器:(雙引號,而不是鍵入單引號!?)

alert("HelloWorld"); 

而不是包裹在< script>標記或甚至$(文件)。就緒(函數(){});

我錯過了什麼嗎?

回答

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和往常一樣:

應用程序/ Web根目錄/ JS /測試。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

一般的共識是不要打擾使用JsHelper,並且在任何情況下都可能在Cake 3中被刪除。

我會把echo $this->Js->writeBuffer();</body>

我不知道確切的運作,但我認爲您的JS正與echo,因爲它是在你view中間被輸出,所以頁面加載時,它alerts。 (JS將位於HTML輸出的中間),而不是在<head>之前或之前</body>

writeBuffer在處理視圖文件之前被調用;所以你的view js不會被添加到緩衝區。然而,我可能不正確。

+0

謝謝您的回答,但writeBuffer。 – charliefarley321

+0

+1爲「一般共識是不要打擾使用JsHelper」 – nIcO

0

在每個CTP文件的末尾將寫入緩衝區,它結束標記似乎並沒有幫助不幸的是前應該工作