如何在从父视图过滤时重新渲染完整日历

Posted

技术标签:

【中文标题】如何在从父视图过滤时重新渲染完整日历【英文标题】:how to re-render fullcalendar while filtering from parent view 【发布时间】:2021-05-03 17:19:31 【问题描述】:

我想根据过滤器中选择的值呈现日历事件。我的过滤器控件在父视图中,我的日历在部分视图中。

我在下面调用 MVC 控制器:

@using (Ajax.BeginForm("_Filter", "Calendar", new AjaxOptions()  
            HttpMethod = "Get", 
            OnSuccess= "events(data)", , 
            new  @class = "form-inline"))

我的成功函数是:

function events(data) 
            eventdata = [];
            var $calendar = $('#calendar');
            response.forEach(function (index) 
                eventdata.push(index);
            )
            $calendar.addEventSource(eventdata, true);
            $calendar.refetchEvents();
        

我在 data 中获取过滤后的值。进入此功能时我的日历消失了,而且我收到以下错误

下面是我的日历代码:

<div id='calendar'></div>
    <!-- The script to initialize the calendar-->
    <script type="text/javascript">
$(function () 
events: function (start, sucessCallback, ErrorCallback) 
                    eventdata = [];
                                var sDate = moment(start.startStr).format('MM-DD-YYYY');
                                var eDate = moment(start.endStr).format('MM-DD-YYYY');

                    $.get("/Calendar/_Events?start=" + sDate + "&end=" + eDate, function (data) 
                    )
                        .done(function (data) 
                                $.each(response, function(index, row) 
                                        eventdata.push(row);
                                    );
                                    successCallback(eventdata);
                                )
                            .fail(function(err) 
                                );
                    
                
 calendar.render(); 
        );

【问题讨论】:

【参考方案1】:

您将标签 ist 与 fullcalendar-5 一起使用。 但由于 4.x fullcalendar 不支持 JQuery。

所以

var $calendar = $('#calendar');
$calendar.addEventSource(eventdata, true);

不能再工作了。错误也正是如此。

替换为

 var calendarEl = document.getElementById('bootstrapModalFullCalendar'); 
 var calendar = new FullCalendar.Calendar(calendarEl,  ...
 calendar.addEventSource(eventdata); // not  second Paramenter!
 calendar.refetchEvents();

(当然你可以在你的函数中使用 JQuery。)

还有很多其他的变化,所以请阅读 5.x 的文档

【讨论】:

以上是关于如何在从父视图过滤时重新渲染完整日历的主要内容,如果未能解决你的问题,请参考以下文章

如何在从父组件到子组件的角度5中单击时传递数据?

React Native - 从父组件重新渲染子组件

SwiftUI 绑定到父视图重新渲染子视图

如何更改完整的日历视图

JQuery完整日历,如何更改视图

如何在 Ember 中(重新)渲染视图模板时收到通知?