簡體   English   中英

Symfony2控制器,視圖和JavaScript

[英]Symfony2 Controller,View and JavaScript

我正在Symfony2下執行一個項目。 我在同一控制器(歷史記錄,日歷)中有兩個動作,並且有兩個視圖。

我的歷史操作稱為日歷操作,默認值為本周。 然后,它呈現歷史視圖,而他本人也呈現日歷視圖。

第一個問題,它正常工作,但是在日歷HTML視圖之前,symfony添加了一個句子: HTTP/1.0 200 OK Cache-Control: no-cache Date: Wed, 30 Jan 2013 10:17:13 GMT我如何刪除此句子?

之所以這樣做,是因為我得到了一些JavaScript鏈接,這些鏈接可以通過調用Calendar Controller(上周或下周有所不同)使日歷進入上周或下周,並在其div中打印新日歷。 這是可行的,但是我有一些奇怪的行為。 我已經將JavaScript代碼放在日歷視圖中。 第一次加載頁面時,JavaScript在代碼源中顯示並正常工作。 如果我按上一個或下個星期按鈕,則日歷控制器會向我返回日歷的新視圖,但沒有javascript。 我在Firebug中看不到JS。 但是(這是最奇怪的部分),JavaScript仍然可以工作(如果我按下按鈕,它將重新加載日歷di​​v)。

這是我的一些代碼:

calendar.html.twig:

<script type="text/javascript">
$('.nextWeek').live('click', function () {
    $.ajax({
        url: 'prof_calendrier/{{ nextWeek }}',
        success: function (html) {$('.calendrier').html(html);}
    });
});
$('.lastWeek').live('click',function () {
    $.ajax({
        url: 'prof_calendrier/{{ lastWeek }}',
        success: function (html) {$('.calendrier').html(html);}
    });
});
</script>
<p>Week from {{datesWeek.0}} to {{datesWeek.6}}</p>
[...] display rest of informations

prof_calendrierAction(日歷操作):

public function prof_calendrierAction ($date) {
        $erreur='';
        $message='';
        $session = $this->container->get('session');

        [...] // lot of operations

    return $this->render('CDUserBundle:Default:prof_calendrier.html.twig', array(
        'next_cours' => $liste_prochains_cours,
        'today' => date('D'),
        'nextWeek' => $nextWeek,
        'lastWeek' => $lastWeek,
        'datesWeek' => $datesWeek
    ));
}

有人能幫助我嗎 ?*

編輯:為避免HTTP消息,我的歷史操作不再調用日歷操作。 我渲染了歷史,從歷史角度看,我得到了ajax init,他將檢查今天一周的日歷操作。 但是,當我使用上周或下周按鈕刷新JavaScript時,html會更改,但是JavaScript不會更新。 JavaScript是在日歷視圖中編寫的,因此為什么日歷操作返回的JS不會超過第一次。

Edit²:我做了幾次測試。 我的上一個/下一個星期的JavaScript按鈕在日歷視圖中。 就像在此視圖中編寫的所有JS行都被捕獲並緩存了一段時間一樣。 我的意思是我下周第一次按,這表明下周沒問題。 第二次,螢火蟲向我顯示了兩個ajax請求,一個請求用於同一周,另一個請求用於后一個。 就像是保留並緩存了第一行JavaScript行,然后在下周第二次按下時,它將調用舊行,然后調用新行...

您可以使用Symfony的響應組件從控制器發送特定的響應。

use Symfony\Component\HttpFoundation\Response;

然后構建您的“ html”變量響應並像這樣發送:

return new Response($return,200,array('Content-Type'=>'application/json'));

在這里,$ return是一個json實體。 200是響應的狀態碼,並且'Content-Type'=>'application / json'必須匹配$ return的類型。

這就是我處理Symfony2日歷的方式 ,並且工作正常。

編輯JS:您無法使用Twig通過Ajax更改JavaScript。 您應該在javascript中定義全局變量,然后根據需要使用它們。 當您處理ajax響應時,可以在JavaScript中訪問這些全局變量。 例如,您可以在樹枝上做:

<script>
var globalMonth = {{ month }}; // set up the starting month
...

然后,當ajax發送響應時,您更新globalMonth並將其用於下一個ajax調用。

奧爾本

我想我知道您的JS發生了什么。 當您收到ajax響應時,您可能會將新操作綁定到nextWeek鏈接上的click事件。 但是在添加該動作之前,您必須

$('#nextWeek').unbind();

為了擺脫以前的綁定事件。

代替$this->render() ,在第二個控制器中調用$this->renderView()

為了更好地使用Symfony,請使用控制器中的path或url函數生成url。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM