在Zend Framework中使用fullcalendar呈现事件数据



我正在将jquery的fullcalendar合并到我的ZF应用程序中。我可以让日历显示在我的视图中,但只要我向fullcalendar的events参数添加一个JSON URL并尝试向其发送我的事件数据,JSON字符串中发生的所有事情都会输出到浏览器。

这是我的控制器中的相关代码:

$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>

我的events参数中的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"
   }
]

谢谢!

我发现了您的问题,您正在使用操作助手版本的json助手,该助手禁用视图渲染器

24.8.4.5.JSON

JSON操作助手做了几件事:

禁用布局(如果当前已启用)。

作为第二个参数传递给的选项数组(可选)Zend_Json::encoder()。此选项阵列允许启用布局和使用Zend_Json_Expr进行编码。

$this->_helper->json($data,array('enableJsonExprFinder'=>true));

禁用ViewRenderer(如果当前已启用)

将"内容类型"响应标头设置为"application/json"。

默认情况下,立即返回响应,而无需等待完成执行的操作。

如果您执行
$this->_helper->json($data, true);(其中true=保留布局)
,您将返回viewRenderer,因为启用keeplayouts=>true调用视图助手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;
    }

好吧,我终于开始工作了(在同事的帮助下,也消化了这里的一些想法。)

我的日历控制器操作不是我应该使用JSON助手的地方。此操作只是设置视图,即我的fullcalendar JS所在的位置。我在同一个控制器中创建了另一个名为calendareavents的操作,并将代码移动到此处以从我的模型中检索事件数据。然后我执行JSON助手命令,该命令将格式化的数据发送到浏览器。

然后,在我的日历视图中,我更改了事件源URL,以指向新的日历事件操作,并且badda-bing,我的事件数据正在我的日历中显示!

现在看来很有道理,但你知道他们怎么说后视!

相关内容

  • 没有找到相关文章

最新更新