2012-01-29 8 views
0

jqueryのfullcalendarをZFアプリケーションに組み込みました。カレンダーを私のビューに表示させることはできますが、fullcalendarのeventsパラメーターにJSON URLを追加してイベントデータを送信しようとすると、JSONストリングで発生したすべてがブラウザーに出力されます。私のイベントパラメータのURLは、私はJSONエンコードされたデータを作成し、コントローラへのパスがZend Frameworkでfullcalendarでイベントデータをレンダリングする

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

です:

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

はここに私のビュースクリプトです:

ここに私のコントローラ内の関連するコードです。

私のJSON文字列の妥当性を確認したところ、うまく見えました。 fullcalendarが私のデータをつかんでカレンダーに入れない理由は何ですか?

[ 
    { 
     "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です!

+0

JSエラーはありますか?私は 'fullcalendar.min.js'に' prependFile() 'を使うべきだと思うので、スクリプトブロックの前に含まれています。 – Phil

+0

Phil、いいえ、JSエラーはなく、JSON文字列だけがブラウザに吐き出されます。また、min.jsにプリペンドファイルを使用するように変更してみましたが、変更はありません。私は本当に '$ this-> _ helper-> json($ sfaCalendar-> data);'が実行されるとすぐに、コントローラから抜け出せないと思っています。開発者のツールバーを使用して、JSON文字列を表示しているページからJSを表示しようとすると、私のカレンダーコードは表示されません。実際はJSもありません。コントローラのヘルパーラインをコメントアウトすると、カレンダーは表示されますが、データは表示されません。 – Hunter

+0

@philが答えを見つけました。 – RockyFord

答えて

1

私はあなたがはViewRenderer を無効にJSONヘルパーのアクションヘルパーバージョンを使用している、あなたの問題を発見しました。

24.8.4.5。 JSON

JSONアクションヘルパーには、いくつかのことを行います。現在有効になっている場合

は、レイアウトを無効にします。

必要に応じて、オプションの配列が Zend_Jsonに第2引数として渡す::エンコードを()。このオプションの配列は、レイアウトを有効にし、Zend_Json_Exprを使用して エンコーディングを可能にします。

$この - > _ヘルパー> JSON($データ、配列( 'enableJsonExprFinder')=> TRUE);

は、現在有効な場合はViewRendererを無効にします。

'Content-Type'レスポンスヘッダーを 'application/json'に設定します。デフォルトでは

は、すぐに実行を終了する アクションを待たずに、応答を返します。

あなたは
$this->_helper->json($data, true);(真=レイアウトを保つ)
を実行する場合は、keepLayoutsの=>真がビューヘルパーJSONを呼び出すことが可能として、バックはViewRendererを取得します:

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

0

さて、私は最終的にこれを仕事にしました(同僚の助けを借りて、ここでいくつかのアイデアを消化しています)。)

私のカレンダーコントローラのアクションは、JSONヘルパーを使用する場所ではありません。このアクションは、私のfullcalendar JSが常駐するビューを設定するだけです。同じコントローラーに別のアクションを作成しました。これは、calendareventsという名前で、ここでモデルからイベントデータを取得するコードを移動しました。次にJSONヘルパーコマンドを実行し、フォーマットされたデータをブラウザに送信します。

次に、私のカレンダービューで、新しいカレンダーアクションアクションを指すようにイベントソースURLを変更しましたが、私のカレンダーにイベントデータが表示されています。

今、多くの意味があるように見えますが、彼らは後ろ向きの光景について何を言っているのか知っています!

関連する問題