我在rails应用程序上工作,每个用户都有一个个人日历。我使用fullCalendar.js。它在calendar.html.erb上加载,在dayClick()上我添加了一个函数来打开包含表单的iframe。这是代码:
<div class="container" id="calendar-cnt">
<%= render partial: 'calendar' %>
</div>
<script>
$( document).ready( function(){
$('#calendar').fullCalendar( {
events: '<%=escape_javascript @user_calendar_url %>',
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay' },
dayClick: function(startDate) {
ifrm = document.createElement("IFRAME");
ifrm.setAttribute("src", "<%=escape_javascript @user_calendar_url %>" + "/new?date=" + startDate);
ifrm.style.width = 600+"px";
ifrm.style.height = 500+"px";
$('#iframe').append(ifrm);
ifrm.addEventListener( "close", function() {
$('#calendar').fullCalendar( 'refetchEvents' );
}, false );
}
} );
});
用户在iframe上创建填写表单的新事件。这工作正常。 我的控制器创建了动作:
def create
@appointment = @user.appointments.build(appointment_params)
respond_to do |format|
format.js
end
end
问题在于渲染。日历应通过刷新事件源立即显示已创建的事件。但这不起作用。它仅通过刷新页面显示新事件。 我尝试在create.js上添加代码:
$('#iframe', window.parent.document).empty();
$('#calendar', window.parent.document).fullCalendar( 'refetchEvents' );
还有在events / new.html.erb中:
<script>
$(window).unload(function(){
$('#calendar', window.parent.document).fullCalendar( 'refetchEvents' );
});
</script>
我不是.js专家,所以我很欣赏这个主题的任何见解。 感谢