2014-09-22 69 views
1

如何通过骨干网收集将数据从本地存储加载到新版本的fullcalendar?本地存储的Backbonejs fullcalendar v2加载事件

我localStorage的数据:

if(localStorage.getItem('events') == null){ 
    var events = [ 
    {"title":"Event 1","start":"2014-09-13T04:00:00.000Z","end":"0000-00-00 00:00:00","creator":432,"backgroundColor":"rgb(190, 219, 5","allDay":"true"}, 
    {"title":"Event 2","start":"2014-09-28T11:30:00.000Z","end":"2014-09-28T19:30:00.000Z","creator":432,"backgroundColor":"rgb(190, 219, 5","allDay":""}, 
    {"title":"Event 3","start":"2014-09-09T04:00:00.000Z","end":"2014-09-11T04:00:00.000Z","creator":432,"backgroundColor":"rgb(31, 138, 11","allDay":"true"} 
    ]; 
    localStorage.setItem('events',JSON.stringify(events)); 
} 

这是我的观点:

define([ 
'underscore', 
'backbone', 
'models/event/Event', 
'collections/events/Events', 
'text!templates/calendar/calendarTemplate.html', 
'momentjs', 
'fullcalendar', 
], function(_, Backbone, Event, Events, calendarTemplate, fullcalendar 
){ 
var EventsView = Backbone.View.extend({ 
    el: document.getElementById("content"), 
    render: function() { 
     var self = this; 
    var events = JSON.parse(localStorage.getItem('events')); 
     var events = new Events(events); 
    var jsevents = events.toJSON(); 
    this.el.innerHTML = _.template(calendarTemplate,{data : jsevents}); 

     $('#calendar').fullCalendar({ 
     agenda: 'h:mm{ - h:mm}', 
        '': 'h(:mm)t', 
      aspectRatio: 1.5, 
      droppable: true, 
      weekend: true, 
    editable: true, 
     defaultView: 'month', 
     firstDay: 1, 
     handleWindowResize: true, 
      allDayDefault: false, 
     firstHour: 7, 
     columnFormat: { 
      month: 'dddd',  
      week: 'ddd, dS', 
      day: 'dddd, MMM dS' 
     }, 
     header: { 
       right: 'prev,next', 
       center: 'title', 
       left: 'month,agendaWeek,agendaDay' 
     }, 
    selectable: true, 
    selectHelper: true, 
    select: function(start, end) { 
       var title = prompt('Event Title:'); 
      var eventData; 
      if (title) { 
      eventData = { 
       title: title, 
      start: start, 
      end: end 
      }; 
       $('#calendar').fullCalendar('renderEvent', eventData, true); 
      } 
      $('#calendar').fullCalendar('unselect'); 
     }, 
     events: [] 
     }); 
     $('#calendar').fullCalendar('addEventSource', jsevents); 
    },   
}); 
return EventsView; 
}); 

你可以看到我的数据日历是jsevents。那么我怎样才能把它加载到我的fullcalendar?应用上GIT感谢所有帮助

更新:

define([ 
'underscore', 
'backbone', 
'models/event/Event', 
'collections/events/Events', 
'text!templates/calendar/calendarTemplate.html', 
'momentjs', 
'fullcalendar', 
], function(_, Backbone, Event, Events, calendarTemplate, fullcalendar 
){ 
var EventsView = Backbone.View.extend({ 
    el: document.getElementById("content"), 
    render: function() { 
     var self = this; 
    var events = JSON.parse(localStorage.getItem('events')); 
     var events = new Events(events); 
    var jsevents = events.toJSON(); 
    this.el.innerHTML = _.template(calendarTemplate,{data : jsevents}); 

     $('#calendar').fullCalendar({ 
     agenda: 'h:mm{ - h:mm}', 
        '': 'h(:mm)t', 
      aspectRatio: 1.5, 
      droppable: true, 
      weekend: true, 
    editable: true, 
     defaultView: 'month', 
     firstDay: 1, 
     handleWindowResize: true, 
      allDayDefault: false, 
     firstHour: 7, 
     columnFormat: { 
      month: 'dddd',  
      week: 'ddd, dS', 
      day: 'dddd, MMM dS' 
     }, 
     header: { 
       right: 'prev,next', 
       center: 'title', 
       left: 'month,agendaWeek,agendaDay' 
     }, 
    selectable: true, 
    selectHelper: true, 
    select: function(start, end) { 
       var title = prompt('Event Title:'); 
      var eventData; 
      if (title) { 
      eventData = { 
       title: title, 
      start: start, 
      end: end 
      }; 
       $('#calendar').fullCalendar('renderEvent', eventData, true); 
       events.push(eventData); 
       localStorage.setItem('events',JSON.stringify(events)); 
      } 
      $('#calendar').fullCalendar('unselect'); 
     }, 
     events: function(start, end, timezone, callback) { 
       callback(jsevents); 
     } 
     }); 
     $('#calendar').fullCalendar('addEventSource', jsevents); 
    },   
}); 
return EventsView; 
}); 

回答

1

不知道这是唯一的问题,但:

。开始和.END需要使用此格式的字符串: “2010-01-09T12:30:00”

看到这里http://fullcalendar.io/docs/event_data/events_array/

您可以使用矩此(包含在fullcalendar反正)

  1. moment.unix(数目)
  2. moment.toISOString()// 2013-02-04T22:44:30.652Z

,或者如果使用时区格式不被接受 http://momentjs.com/docs/#/displaying/format/

注意,你也可以使用函数作为源(允许延迟加载)

+0

感谢您的帮助,我想存储新事件到局地存储也是如此。所以我只是不知道如何创建功能,将骨干收集中的新事件添加到fullcalendar中。我已经添加了[GIT](https://github.com/makromat/calBB)... – Makromat 2014-09-22 14:33:50

+0

因此,您可以让事件或eventSources(如果您需要多个源)成为返回您的事件的函数想要显示或者说完全的日历请求。函数签名看起来像这样:函数(开始,结束,时区,回调)'并记录[这里](http://fullcalendar.io/docs/event_data/events_function/) – 2014-09-22 23:55:52

+0

我也认为它至少是打算在通过'new Events([event1,event2,...])创建集合之前,通过'new Event({...})'将原始数组中的每个项目转换为'' – 2014-09-23 00:03:05