我正在将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,我的事件数据正在我的日历中显示!
现在看来很有道理,但你知道他们怎么说后视!