2012-03-12 8 views
2

jqueryフルカレンダープラグインのjsonフィードを取得しようとしていますが、私は大したことはありません。私がcoldfusionから返すデータは、正しくフォーマットされていません(少なくとも私の推測です)。ここで私は戻って取得していますものです:jsonフィードをcoldfusionからjquery fullcalendarにフォーマットするにはどうすればよいですか?

{"COLUMNS":["TITLE","START","END","REQUEST_TYPE_ID"],"DATA":[["duration of a VTC ","2012-03-15T12:00:00Z","2012-03-15T15:00:00Z",1],["a new vtc overlap","2012-03-15T11:45:00Z","2012-03-15T14:15:00Z",1]]} 

私は完全なカレンダーはこのデータ型を読み取る方法を知らないかなり確信しています。だから問題は、完全なカレンダーが受け入れる形式でCFにデータを戻すことができますか?ここに何か他のことはありますか?

は、ここに私のコンポーネントである:

<cfquery datasource="#arguments.dsn#" name="eventlist"> 
select title, to_char(start_time,'YYYY-MM-DD')||'T'||to_char(start_time,'HH24:MI:SS')||'Z' as "start", 
to_char(start_time,'YYYY-MM-DD')||'T'||to_char(start_time + (duration/1440),'HH24:MI:SS')||'Z' as "end", request_type_id 
from ((request r join event_schedule es on es.request_id = r.id)left join location_ref loc on loc.location_id = r.location_id) 
where site_id = <cfqueryparam value="#arguments.site_id#" cfsqltype="cf_sql_varchar" /> 
and request_type_id = <cfqueryparam value="#arguments.evnttype#" cfsqltype="cf_sql_varchar" /> 
and start_time between to_date('#sdate#', 'mon dd yyyy') and to_date('#edate#', 'mon dd yyyy') 
</cfquery> 

とリターンフォーマットはJSONです。

returnformat="json" 

ありがとうございます!

答えて

7

プラグインが機能するようにデータをフォーマットする必要があります。それはイベントオブジェクトの配列である必要がありますhttp://arshaw.com/fullcalendar/docs/event_data/Event_Object/

したがって、上記のリンクのドキュメントで指定されたキーを使用してクエリをループし、構造体の配列を作成する必要があります。

JavaScriptは変数名では大文字と小文字が区別され、CFはデフォルトで構造体のキーを大文字にしたいので、配列表記を使用する必要があります。代わりの

<cfset myStruct["id"] = 1> 

: - - :

<cfset myStruct.id = 1> 

私はそれが役に立てば幸い

だから、これを行います。

+0

ありがとう!それは大いに役立ちます。しかし、私は実際に私が必要としたことをした[RIAforge](http://tojson.riaforge.org/)のtoJSON.cfcを実際に見つけました。何らかの理由で、私はjsonをナビゲートするだけで問題があり、自分自身を作成するという考えは圧倒しているようでした。とにかく、大変感謝しています。 – wblakenc

+3

あなたはSerializeJSON()を使うか、または "returnformat = 'json'' – Henry

+0

@Henryを使って関数からデータを返すことができます。私の経験ではありません。 – wblakenc

0

作業を開始する必要があるので、あなたはまた、キーワードは小文字であることを確認するために必要があります... JavaScriptのようなfullCalendarは大文字と小文字が区別され、終了など

メールで送信だけbaynezy答えの最後を読んで、このしてください無関心に言及しています。

+0

どちらかの方法で入力していただきありがとうございます。あなたは正しいです、CFはUCASEにすべてを入れるのが好きで、fullcalendarはそれらがLCASEになることを期待しています。 – wblakenc

1

渡された日付に基づいてjSonを返すCFCを作成しました。私のCFCは壊れ :

<cfcomponent> 
     <cffunction name="LoadCalendarData" access="remote" output="false" returntype="Any" returnformat="JSON"> 

      <cfargument name="DEPTID" type="any" required="false" /> 
      <cfargument name="STAFFCLASSID" type="any" required="false" /> 
      <cfargument name="start" type="date" required="false" /> 
      <cfargument name="end" type="date" required="false" /> 

      <cfset arguments.start=#DateFormat(DateAdd("s", arguments.start, "January 1 1970 00:00:00"), "mmmm dd, yyyy")#/> 
      <cfset arguments.end=#DateFormat(DateAdd("s", arguments.end, "January 1 1970 00:00:00"), "mmmm dd, yyyy")#/> 
<cfinvoke component="DataStore" method="Calendar_LU" returnvariable="qGetCalendar" DEPTID="#arguments.deptid#" STAFFCLASSID="#arguments.STAFFCLASSID#" START="#arguments.start#" END="#arguments.end#" /> 

を私は返された情報に基づいてデータをループすることによって構築し始め、その後に使用することができますfullcalendarものにして、開始日と終了日の引数をtranlate。次に私は日付と時刻を分解し、fullCalendarに戻すことができます。 fullCalendarは、あなたが複数を読み込むことができますので、私は私達の休日に引き出すために、別のCFC呼び出しを追加見ることができるように、私は

eventSources: [{url:'CFCs/Holidays.cfc?Method=LoadCalendarHolidays'},{url:'CFCs/CalendarDataRemote.cfc?Method=LoadCalendarData&DEPTID=<cfoutput>#deptid#</cfoutput>&STAFFCLASSID=<cfoutput>#STAFFCLASSID#</cfoutput>'}], 

CFCを呼び出すためにこれを使用すると呼ばれるスクリプトで

<cfset CalendarData=[] />  
    <cfset CalData = arraynew(2) />   
    <cfloop query="qGetCalendar"> 

    <cfset sd = #dateformat(LEAVESTARTDATE,'dd')# /> 
    <cfset sm = #dateformat(LEAVESTARTDATE,'mm')# /> 
    <cfset sy = #dateformat(LEAVESTARTDATE,'yyyy')# /> 
    <cfset sh = #timeformat(LEAVESTARTDATE,'HH')# /> 
    <cfset si = #timeformat(LEAVESTARTDATE,'mm')# /> 
    <cfset ed = #dateformat(LEAVEENDDATE,'dd')# /> 
    <cfset em = #dateformat(LEAVEENDDATE,'MM')# /> 
    <cfset ey = #dateformat(LEAVEENDDATE,'yyyy')# /> 
    <cfset eh = #timeformat(LEAVEENDDATE,'HH')# /> 
    <cfset ei = #timeformat(LEAVEENDDATE,'mm')# /> 
<cfset event=structNew() /> 
<cfset event['title']='#Left(ListLast(FULLNAME,","),1)#. #REReplace(ListFirst(FULLNAME,","),"'","")#' /> 
<cfset event['start']='#sy#-#sm#-#sd# #sh#:#si#' /> 
<cfset event['end']='#ey#-#em#-#ed# #eh#:#si#' /> 
<cfset event['textColor']='##330000'/> 
<cfset event['backgroundColor']=STATUSColor /> 
<cfset event['url']=clickablePath /> 
<cfset arrayAppend(CalendarData,event)/> 

</cfloop> 

    <cfreturn calendarData /> 
</cffunction> 

カレンダーデータ。これがうまくいきたいです

+0

ありがとうございます@ Th0raxe – Fergus

+0

うまくやっていますが、よく分かりました。 – HPWD