我正在使用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
但是此解决方案均无效。有什么想法吗?
答案 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。不是为了变异它,我们在这里做了类似的事情。