2013-09-26 6 views
1

Я пытаюсь обновить проект fullcalendar-asp-net с последней версией скрипта fullcalendar. Этот проект использует 1.4.7 версию fullcalendar (которая очень старая) с jQuery 1.3.2 (это тоже очень старомодно). Мне нравится полная функциональность этого проекта, поэтому я просто хочу его использовать, обновив его до 1.6.4 (последней) версии fullcalendar с помощью jquery 1.10.2 (последняя версия поставляется с этой версией jquery).Обновление проекта FullCalendar-asp-net до последней версии 1.6.4

Проблема, с которой я столкнулась, заключается в том, что я не могу сделать события из обработчика при обновлении скриптов. Единственные изменения, которые я сделал меняются сценарии в заголовке страницы, как:

  • Jquery 1.3.2 1.10.2
  • Jquery-интерфейс для 1.10.3
  • FullCalendar 1.4.7 до 1.6.4

Все базовые методы работают нормально, поэтому я могу добавлять новые события и сохранять их в db и обновлять их без проблем. Когда я перезагружаю страницу, все они исчезают (это означает, что они не загружаются). Это код js, который должен загружать календарь в pageload (Unneccessary codes удаляются для упрощения).

var calendar = $('#calendar').fullCalendar({ 
    events: "JsonResponse.ashx", 
}) 

Странная вещь, когда я копирую и вставляю ответ json непосредственно в события, они все появляются. Код выглядит так:

var calendar = $('#calendar').fullCalendar({ 
    events: [{ id: '42', title: 'asdf', start: 1378771200, end: 1378944000, allDay: true, description: 'asdfasdf' }, 
     { id: '43', title: 'sadfsdf', start: 1378944000, end: 1379030400, allDay: true, description: 'asdfgadfasdfd' }, 
     { id: '44', title: 'asdf', start: 1379030400, end: 1379030400, allDay: true, description: 'asdfasdf' }] 
}) 

Я начал думать между версиями 1.4.7 и 1.6.4 fullcalendar, должна быть разница в загрузке событий. Когда я смотрю документацию, я вижу то же самое, что и я. Разве это не идея отправки строки JSON в события? Строка JSON, созданная обработчиком ashx, верна, поэтому она работает, когда я копирую и вставляю ее напрямую.

Я немного потерял здесь и потратил достаточно времени на поиск относительной информации и чтение основ. Наконец пришел сюда, надеясь, что кто-то может указать мне на правильное направление.

Примечание: я не писал коды ashx, думая, что это не важно, поскольку он создает допустимую строку JSON и ее можно найти из проекта fullcalendar-asp-net.

Спасибо!

ответ

2

В конце концов, я закончил модификацию исходного обработчика ashx в проекте «fullcalendar-asp-net». Вместо добавления событий в строку в цикле foreach я создал список событий и преобразовал его в строку Json с этим кодом.

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = 
    new System.Web.Script.Serialization.JavaScriptSerializer(); 
    string sJSON = oSerializer.Serialize(tasksList); 

    context.Response.Write(sJSON); 

Полный код ashx выглядит следующим образом.

/// <summary> 
/// Summary description for JsonResponse 
/// </summary> 
public class JsonResponse : IHttpHandler, IRequiresSessionState 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "text/plain"; 

     //CONVERT FROM UTC TIMESTAMP TO LOCAL DATETIME 
     DateTime start = ConvertFromTimeStamp(long.Parse(context.Request.QueryString["start"])); 
     DateTime end = ConvertFromTimeStamp(long.Parse(context.Request.QueryString["end"])); 

     List<int> idList = new List<int>(); 
     List<ImproperCalendarEvent> tasksList = new List<ImproperCalendarEvent>(); 

     //GENERATE JSON SERIALIZABLE EVENTS 
     foreach (CalendarEvent cevent in EventDAO.getEvents(start, end)) 
     { 
      tasksList.Add(new ImproperCalendarEvent 
      { 
       id = cevent.id, 
       title = cevent.title, 
       start = ConvertToTimestamp(Convert.ToDateTime(cevent.start).ToUniversalTime()).ToString(), 
       end = ConvertToTimestamp(Convert.ToDateTime(cevent.end).ToUniversalTime()).ToString(), 
       description = cevent.description, 
       allDay = cevent.allDay, 
      } 
       ); 
      idList.Add(cevent.id); 
     } 

     context.Session["idList"] = idList; 

     //SERIALIZE EVENTS TO STRING 
     System.Web.Script.Serialization.JavaScriptSerializer oSerializer = 
     new System.Web.Script.Serialization.JavaScriptSerializer(); 
     string sJSON = oSerializer.Serialize(tasksList); 

     //WRITE JSON TO RESPONSE OBJECT 
     context.Response.Write(sJSON); 
    } 

    /// <summary> 
    /// Converts a UTC transformed timestamp into a local datetime 
    /// </summary> 
    /// <param name="timestamp"></param> 
    /// <returns></returns> 
    private DateTime ConvertFromTimeStamp(long timestamp) 
    { 
     long ticks = (timestamp * 10000000) + 621355968000000000; 
     return new DateTime(ticks, DateTimeKind.Utc).ToLocalTime(); 
    } 

    private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 

    private static long ConvertToTimestamp(DateTime value) 
    { 
     TimeSpan elapsedTime = value - Epoch; 
     return (long)elapsedTime.TotalSeconds; 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

Когда я задал этот вопрос, я с помощью веб-метод вместо этого обработчика, поэтому мой JS код для вызова календаря было иначе, чем должно быть. Теперь, я использую точно такой же метод, который был объяснен в полной календарной документации. Подобно;

$('#calendar').fullCalendar({ 
events: '/myfeed.php', }); // for me, that is "JsonResponse.ashx" 

Теперь он работает с последней версией всех сценариев, о которых я упоминал в вопросе. JQuery 1.10.2, JQuery-UI 1.10.3 и fullcalendar 1.6.4. И это работает отлично!

Я надеюсь, что те, кто имел проблемы, выясняя этот вопрос не будет страдать, как я :)

Спасибо!

+0

Эй, мужик, не могли бы вы поделиться всем своим решением? Я изменил код ashx, чтобы отразить ваш, и до сих пор нет:/ – esausilva

+0

Ничего, я получил его работу ... глупое qTip вызывало конфликт ... Большое спасибо за ваш код, работал красивым – esausilva

+0

С удовольствием! ;) – ilter