2012-01-29 65 views
0

我將jquery的fullcalendar合併到我的ZF應用程序中。我可以讓日曆顯示在我的視圖中,但只要我將JSON URL添加到fullcalendar的events參數並嘗試將其發送給我的事件數據,那麼JSON字符串中發生的所有事情都會輸出到瀏覽器。在Zend Framework中使用fullcalendar渲染事件數據

下面是我的控制器相關代碼:

$sfaCalendar = new Model_Exchange(); 
$sfaCalendar->getCalendarEntries($startDateTime,$endDateTime,'Calendar'); 
$this->_helper->json($sfaCalendar->data); 

這是我的看法腳本:

<?php 
$this->headLink()->appendStylesheet('/styles/module/urpower/sfa/fullcalendar.css'); 
$this->headLink()->appendStylesheet('/styles/module/urpower/sfa/jquery-ui-1.8.16.custom.css'); 
$this->headScript()->prependScript(
" $(document).ready(function() { 
     $('#calendar').fullCalendar({ 
      header: { 
      left: 'prev,next today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay' 
     }, 
     events: '/urpower/sfa/calendar',   
     theme: true, 
     }); 
    }); 
"); 

$this->headScript()->appendFile('/scripts/fullcalendar/fullcalendar.min.js'); 

?> 
<div id='calendar'></div> 

在我的事件參數的URL是路徑,我創建JSON編碼的數據控制器。

我檢查了我的JSON字符串的有效性,它看起來很好。任何想法爲什麼fullcalendar不抓住我的數據並將其放入日曆?

這裏是我的JSON:

[ 
    { 
     "title":"Add notes to Innotas notes", 
     "start":"2012-01-02T16:30:00Z" 
    }, 
    { 
     "title":"Test appointment #1", 
     "start":"2012-01-03T21:00:00Z" 
    }, 
    { 
     "title":"Test appointment #2", 
     "start":"2012-01-03T22:00:00Z" 
    }, 
    { 
     "title":"Test appointment #3", 
     "start":"2012-01-03T22:30:00Z" 
    }, 
    { 
     "title":"Add notes to Innotas notes", 
     "start":"2012-01-09T16:30:00Z" 
    }, 
    { 
     "title":"Add notes to Innotas notes", 
     "start":"2012-01-16T16:30:00Z" 
    }, 
    { 
     "title":"SFA Phase 2 - status, testing, etc.", 
     "start":"2012-01-19T18:30:00Z" 
    }, 
    { 
     "title":"Add notes to Innotas notes", 
     "start":"2012-01-23T16:30:00Z" 
    }, 
    { 
     "title":"RLK Integration", 
     "start":"2012-01-23T17:00:00Z" 
    }, 
    { 
     "title":"FW: Quarterly Employee Gathering", 
     "start":"2012-01-27T17:30:00Z" 
    }, 
    { 
     "title":"Meeting with KAREN DUFFY X423 ALT # DI\/PUMPKIN RIDGE GOLF CLUB", 
     "start":"2012-01-30T14:15:00Z" 
    }, 
    { 
     "title":"Add notes to Innotas notes", 
     "start":"2012-01-30T16:30:00Z" 
    } 
] 

謝謝!

+0

你是否得到任何JS錯誤?我認爲你應該在'fullcalendar.min.js'中使用'prependFile()',以便它包含在腳本塊 – Phil 2012-01-30 00:34:41

+0

Phil之前,不,沒有JS錯誤,只是JSON字符串吐出到瀏覽器。我也嘗試改變min.js來使用prepend文件,並且沒有改變。我真的開始認爲我甚至沒有把它從控制器中取出來,只要'$ this - > _ helper-> json($ sfaCalendar-> data);'被執行,腳本就會死掉。使用開發人員的工具欄,當我嘗試從顯示我的JSON字符串的頁面查看JS時,我看不到任何我的日曆代碼,實際上根本沒有JS。如果我在控制器中註釋掉輔助線,我會看到日曆但沒有任何數據! – Hunter 2012-01-30 02:37:23

+0

@phil找到了可能的答案。 – RockyFord 2012-01-30 03:54:57

回答

1

,我發現您的問題,您使用的是動作助手版本JSON助手即禁用視圖解析器的。

24.8.4.5。 JSON

JSON動作助手完成以下任務:如果當前已打開

禁用佈局。

(可選)作爲第二個參數傳遞給 Zend_Json :: encode()的選項數組。這些選項允許使用Zend_Json_Expr來啓用佈局和編碼。 ($ data,array('enableJsonExprFinder'=> true));}};}}

如果當前啓用,則禁用ViewRenderer。

將'Content-Type'響應標頭設置爲'application/json'。

默認情況下,立即返回響應,無需等待 操作完成執行。

如果執行
$this->_helper->json($data, true);(其中true =保留佈局)
你會得到視圖解析器回來,爲使keeplayouts =>真調用視圖助手JSON:

//excerpt from:Zend_Controller_Action_Helper_Json 
public function encodeJson($data, $keepLayouts = false) 
    { 
     /** 
     * @see Zend_View_Helper_Json 
     */ 
     require_once 'Zend/View/Helper/Json.php'; 
     $jsonHelper = new Zend_View_Helper_Json(); 
     $data = $jsonHelper->json($data, $keepLayouts); 

     if (!$keepLayouts) { 
      /** 
      * @see Zend_Controller_Action_HelperBroker 
      */ 
      require_once 'Zend/Controller/Action/HelperBroker.php'; 
      Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setNoRender(true); 
     } 

     return $data; 
    } 
+0

這絕對看起來像正確的方向,但只需將「true」參數添加到幫助程序調用中並不會改變任何內容。不過,我會繼續努力研究這個角度。 – Hunter 2012-01-30 04:39:19

0

好吧,我終於得到了這個工作(與同事的幫助,以及消化這裏的一些想法。)

我的日曆控制器操作不是我應該使用JSON幫助器的地方。這個動作只是設置了我的fullcalendar JS所在的視圖。我在同一個控制器中創建了另一個名爲calendarevents的動作,並將代碼移動到此處從我的模型中檢索事件數據。然後我執行JSON helper命令,將格式化的數據發送到瀏覽器。

然後,在我的日曆視圖中,我將事件源URL更改爲指向新的calendarevents操作,並且badda bing,我的日曆數據顯示在我的日曆中!

似乎現在有很多意義,但你知道他們對後視力的看法!