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

Posted

技术标签:

【中文标题】JQuery完整日历,如何更改视图【英文标题】:JQuery full calendar, how to change view 【发布时间】:2011-08-03 23:32:53 【问题描述】:

我在我的应用程序中使用 JQuery Full Calendar,但我需要稍微不同的视图, 也就是说 - 在月视图中不显示任务,只是将事件关联到与没有事件的日期不同的颜色。然后,当用户在月视图中单击这一天时 - 打开这一天的日视图,显示所有事件。

可以做这样的调整吗? 非常感谢。

【问题讨论】:

【参考方案1】:

我已经通过使用两个提要来做到这一点

我的服务器返回 feedBasic 和 feedComplex

feedBasic 只会在当月显示一个事件,无论其中有多少其他相同事件 - 点击它,它将切换到月视图并加载完整的提​​要。

也许这段代码可以帮助你。它是代码分配,但它处理 4 个提要 + 谷歌日历。有一些错误,但它是有效的核心功能。

 $(document).ready(function () 

         var lastView;

         $('#calendar').fullCalendar(
             header: 
                 left: 'today',
                 center: 'prev,title,next',
                 right: 'month,basicDay'
             ,
             slotMinutes: 30,
             firstHour: 5,
             editable: false,
             timeFormat: 'H:mm',
             firstday: 0, //Sunday0 Monday1..etc
             allDayDefault : true,
             //loading: function(bool)  if (bool) $('#loadingImg').show(); else $('#loadingImg').hide(); alert( $('#calendar').fullCalendar('clientEvents') ) ,

             loading: function(bool)  if (bool) $('#loadingImg').show(); else $('#loadingImg').hide();  ,

             //VIEW CHANGE - ALSO ADDS INITIAL SOURCES PER DAY VIEW
             viewDisplay: function(view) 
                                        if (lastView == undefined)  lastView = 'firstRun';  

                                        if (view.name != lastView )
                                        

                                                if (view.name == 'month') 
                                                   
                                                    if ( '<%=brsEnabled %>' == 'True' )  $('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx?style=brsComplex' ); $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx?style=brsBasic' );     
                                                    if ( '<%=activeEnabled %>' == 'True' )   $('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx?style=fixturesComplex' ); $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx?style=fixturesBasic' );    
                                                    if ( '<%=previousEnabled %>' == 'True' )  $('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx?style=previousComplex' ); $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx?style=previousBasic' );   
                                                    if ( '<%=newsEventEnabled %>' == 'True' )  $('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx?style=newsEvents' ); $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx?style=newsEvents' );   
                                                  
                                                 if (view.name == 'basicDay') 
                                                   
                                                    if ( '<%=brsEnabled %>' == 'True' )  $('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx?style=brsBasic' );  $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx?style=brsComplex' );   
                                                    if ( '<%=activeEnabled %>' == 'True' )  $('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx?style=fixturesBasic' );  $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx?style=fixturesComplex' );   
                                                    if ( '<%=previousEnabled %>' == 'True' )  $('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx?style=previousBasic' );  $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx?style=previousComplex' );   
                                                    if ( '<%=newsEventEnabled %>' == 'True' )  $('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx?style=newsEvents' ); $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx?style=newsEvents' );   
                                                  

                                         lastView = view.name;
                                        
                                    ,

             //EVENT CLICK
             eventClick: function( event, jsEvent, view ) 
              
                //STOP GOOGLE LINK FROM FOLLOWING THROUGH ON ALL OCCASIONS
                if (event.url != undefined)  if (event.url.indexOf("google") > 0)  return false;  

                if (event.newsEvent == "True") 
                    
                        //SOME OTHER SPECIFIC FUNCTION
                    
                    else
                    
                        var view = $('#calendar').fullCalendar('getView');
                        if  (view.name == 'month') 
                        
                            $('#calendar').fullCalendar('changeView', 'basicDay');
                            $('#calendar').fullCalendar( 'gotoDate', event.start );
                        
                        if  (view.name == 'basicDay') 
                           
                            //HANDLES CLICK OF EVENT IN DAY VIEW TO EXPAND DIV WITH EXTRA INFORMATION

                        
                    
             ,

             //HOVER
             //eventMouseover: function( event, jsEvent, view )  if (event.PopUp == 'yes')  $(this).CreateBubblePopup( innerhtml: + '<br/>Click for more infromation.'  , themePath: 'images/bubblepopup-theme', themeName: 'black'  );    ,

             //DAY CLICK
             //dayClick: function( event, jsEvent, view )  alert("Day Clicked.. Booking?")  ,

             //ALL COMBINED INITIAL FEEDS
             eventSources: [ <%=myGoogleCalendars %> ] 

         );

         //ATTACHING A LOADING IMAGE
         $('.fc-header-title').append('<img id="loadingImg" style="width:16px; height:11px; float:none; margin-top: -25px;" src="images/loadingSmall.gif" />');

         //HDID FILTER
         if ('<%=activeEnabled %>' == 'True') 

         $('.fc-header-left').append('<span class="fc-button fc-button-today fc-state-default fc-corner-left fc-corner-right fc-state-active"><span class="fc-button-inner"><span id="filterHDID" class="fc-button-content">hdid</span><span class="fc-button-effect"><span></span></span></span></span>');
         $("#filterHDID").click(function()   if ($(this).parents('span').hasClass('fc-state-active')) 
            
               $('.data-fixtures').css('display', 'none')
               $(this).parents('span').removeClass('fc-state-active');
               if ('<%=previousEnabled %>' == 'True')  $('.data-previous').css('display', 'none');  
                                                      
             
            else 
            
               $('.data-fixtures').css('display', 'inline')
               $(this).parents('span').addClass('fc-state-active');
               if ( '<%=previousEnabled %>' == 'True')  $('.data-previous').css('display', 'inline')  
                                                       
                             );
         


         //BRS FILTER
         if ( '<%=brsEnabled %>' == 'True' ) 

         $('.fc-header-left').append('<span class="fc-button fc-button-today fc-state-default fc-corner-left fc-corner-right fc-state-active"><span class="fc-button-inner"><span id="filterBRS" class="fc-button-content">brs</span><span class="fc-button-effect"><span></span></span></span></span>');
         $("#filterBRS").click(function()   if ($(this).parents('span').hasClass('fc-state-active')) 
            
                $('.data-brs').css('display', 'none')
                //$('#calendar').fullCalendar('removeEventSource', '/diaryFeed.aspx?style=brs'); 
                $(this).parents('span').removeClass('fc-state-active');
             
            else 
            
               $('.data-brs').css('display', 'inline')
               //$('#calendar').fullCalendar('addEventSource', '/diaryFeed.aspx?style=brs');  
               $(this).parents('span').addClass('fc-state-active');
                             );
         

         //GOOGLE FEED FILTER
         if ( '<%=googleEnabled %>' == 'True') 

            $('.fc-header-left').append('<span class="fc-button fc-button-today fc-state-default fc-corner-left fc-corner-right fc-state-active"><span class="fc-button-inner"><span id="filterGCAL" class="fc-button-content">google</span><span class="fc-button-effect"><span></span></span></span></span>');
            $("#filterGCAL").click(function()   if ($(this).parents('span').hasClass('fc-state-active')) 
            
                $('#calendar').fullCalendar('removeEventSource', <%=myGoogleCalendars%>);  $(this).parents('span').removeClass('fc-state-active');
             
            else 
            
               $('#calendar').fullCalendar('addEventSource', <%= myGoogleCalendars%>);  $(this).parents('span').addClass('fc-state-active');
                             );
        

        //MORE



     );
 </script>

关于应该发生的事情的视频。 以您需要的方式插入 http://www.youtube.com/watch?v=UKUu9KJxunI

【讨论】:

我已将其添加为我的最爱,我认为该代码中有很多我可以在我的全日历实现中使用。特别是您的按钮,即 BRS/Google 等。我可以使用它来切换用户在单击按钮时加载详细或简单的数据集。而且你真的帮我解决了一个大问题。我不知道如何根据月/日/周是否加载来加载不同的数据提要详细信息/简单。我需要viewDisplay: function(view) alert(view.name); 一直在文档中! 我只是想澄清一下,当您第一次加载到日历中,然后在月视图或基本日视图之间单击时,您会看到重复记录吗?我已经完全实现了您的代码(关于if (view.name != lastView ) 等),但无法解决这个问题【参考方案2】:

http://webdesignandseo.net/jquery/datepicker/

如果您愿意,您实际上可以在普通的 jQuery DatePicker 中执行此操作(前往 March 查看事件并单击以获得警报)。我不太了解完整日历插件的工作原理,但文档中可能会有一些帮助:

http://arshaw.com/fullcalendar/docs/

【讨论】:

【参考方案3】:

这是一个解决方案,在视图之间移动时不会产生重复。它根据您加载的视图加载两组不同的数据源。我用 ppumkins 帮助他。注意addEventSourceremoveEventSource 调用的顺序。对我来说,我需要在removeEventSource 之前加载addEventSource,否则在第一次查看点击时会出现重复项

http://dev2.mycmo.com.au/fullcalendar/calendar_problem_demo.php

【讨论】:

以上是关于JQuery完整日历,如何更改视图的主要内容,如果未能解决你的问题,请参考以下文章

完整日历周显示垂直视图

如何在完整日历 Jquery 的周视图和日视图中隐藏开始时间(.fc-time)?

如何在议程日视图中正确呈现完整日历

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

jQuery完整日历 - 如何防止用户在非工作时间添加事件?

laravel 完整日历不适用于主题 JQuery 和 Bootstrap