Fullcalendar json许多来源

时间:2019-03-21 15:52:46

标签: javascript ruby-on-rails json fullcalendar

我正在使用FullCalendar.js,顺便说一句,这真是太神奇了。这次我发现了对json数据的操纵。 我的问题如下: 我有变量@missions和@events。但是我无法在我的日历上调用和渲染两者。有人可以帮我吗?

我已经尝试过的东西

1)在第二行添加这样的好请求

$('#calendar').fullCalendar({
  events: '/missions.json',
  events: '/events.json'
})

2)或像这样在我的json文件中添加第二个循环:

但是此解决方案均无效。有什么想法吗?

json.array! @missions do |mission|
  date_format = '%Y-%m-%dT%H:%M:%S'
  json.id mission.id
  json.title mission.title
  json.start mission.start.strftime(date_format)
  json.end mission.end.strftime(date_format)
  json.edit_url edit_mission_path(mission)
end

json.array! @events do |event|
  date_format = '%Y-%m-%dT%H:%M:%S'
  json.id event.id
  json.title event.title
  json.start event.start.strftime(date_format)
  json.end event.end.strftime(date_format)
  json.edit_url edit_event_path(event)
end

但是此解决方案均无效。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

fullCalendar对象中只能有一个“事件”键。

$('#calendar').fullCalendar({
  events: '/events.json',
});

如果希望它们都存在于同一日历中,请在控制器或JS中将它们组合在一起。将它们组合到控制器中可能会容易得多。

这是基本的控制器方法:

def action
  @missions = Mission.all
  @events = Event.all
  @all_events = @events + @missions
  respond_to do |format|
    format.json { render json:  @all_events }
    format.html
  end
end

如果要使用jbuilder文件,则可能看起来像这样:

missions = json.array! @missions do |mission|
  date_format = '%Y-%m-%dT%H:%M:%S'
  json.id mission.id
  json.title mission.title
  json.start mission.start.strftime(date_format)
  json.end mission.end.strftime(date_format)
  json.edit_url edit_mission_path(mission)
end

events = json.array! @events do |event|
  date_format = '%Y-%m-%dT%H:%M:%S'
  json.id event.id
  json.title event.title
  json.start event.start.strftime(date_format)
  json.end event.end.strftime(date_format)
  json.edit_url edit_event_path(event)
end

events + missions

注意,添加仍然在底部进行。 IMO,转换最好留给助手和控制器动作,而jbuilder则将它们融合到混淆的视图中。 jbuilder应该主要用于呈现特定的JSON。不是为了变异它,我们在这里做了类似的事情。