Fullcalendar json 多个来源

Fullcalendar json many sources

我正在使用 FullCalendar.js,顺便说一句,这太棒了。这次我发现了对 json 数据的操纵。 我的问题如下: 我有变量@missions 和@events。但是我不能在我的日历上同时调用和渲染。谁能帮我解决这个问题?

我已经试过了

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

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

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

但此解决方案的 none 有效。有什么想法吗?

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

但此解决方案的 none 有效。有什么想法吗?

您的 fullCalendar 对象中只能有一个 "events" 键。

$('#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。不是为了改变它,我们在这里做的。