Nano Hash - криптовалюты, майнинг, программирование

Как отформатировать json-канал из coldfusion в jquery fullcalendar?

Я пытаюсь заставить json-канал работать с плагином jquery Full Calendar, но мне не очень повезло. Данные, которые я получаю от coldfusion, имеют неправильный формат (по крайней мере, это мое предположение). Вот что я получаю обратно:

{"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"

Любые идеи?

Спасибо!


Ответы:


1

Вам необходимо отформатировать данные для работы плагина. Это должен быть массив объектов событий http://arshaw.com/fullcalendar/docs/event_data/Event_Object/

Итак, вам нужно пройтись по вашему запросу и создать массив структур с ключами, указанными в документации по приведенной выше ссылке.

Вам нужно будет использовать нотацию массива, так как JavaScript чувствителен к регистру для имен переменных, а CF любит делать ключи в структурах прописными по умолчанию.

Итак, сделайте это: -

<cfset myStruct["id"] = 1>

Вместо:-

<cfset myStruct.id = 1>

Надеюсь, это поможет.

12.03.2012
  • Спасибо! Это очень помогает. Однако на самом деле я нашел файл toJSON.cfc на RIAforge, который делал именно то, что мне было нужно. По какой-то причине у меня просто проблемы с навигацией по json, и мысль о создании собственного казалась немного подавляющей. Во всяком случае, очень признателен. 12.03.2012
  • вы можете просто использовать SerializeJSON() или вернуть данные из cffunction с помощью returnformat='json' 12.03.2012
  • @ Генри, не из моего опыта. 14.03.2012

  • 2

    Я создал CFC, который возвращает jSon на основе переданной даты; Мой 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, затем я начинаю строить, зацикливая данные на основе возвращенной информации. затем я разбиваю даты и время, чтобы передать их обратно в fullCalendar.

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

    в сценарии, где вызывается fullCalendar, я использую это для вызова CFC

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

    Как вы можете видеть, я добавил еще один вызов CFC для загрузки наших праздников, чтобы вы могли загружать данные более чем одного календаря. Надеюсь это поможет

    20.03.2012
  • Красиво сделано и хорошо документировано, спасибо, что поделились этим. 14.05.2016

  • 3

    Вам также необходимо убедиться, что ключевые слова написаны в нижнем регистре... fullCalendar, как и javascript, чувствителен к регистру, поэтому вам нужно начинать, заканчивать и т. д.

    OOOPS только что прочитал в конце ответа байнезы, упоминает об этом, пожалуйста, не обращайте внимания.

    14.03.2012
  • Спасибо за вклад в любом случае. Вы правы, CF любит помещать все в UCASE, а fullcalendar ожидает, что они будут в LCASE. 14.03.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..