Установите полнокалендарный вид по умолчанию на основе пользовательских предпочтений

#javascript #jquery #fullcalendar

#JavaScript #jquery #Полный календарь

Вопрос:

Я хотел бы добавить кнопку в календаре, которая позволяет пользователю устанавливать представление по умолчанию на любое текущее представление. Я знаю, что могу установить представление по умолчанию ( defaultView: basicWeek например), но затем, когда вы закрываете и снова открываете календарь, он сбрасывается. Как я могу сохранить текущее представление календаря в переменной приложения для использования при следующем открытии приложения?

Комментарии:

1. можно сохранить его в localStorage

Ответ №1:

Имейте в виду, что этот пример может работать или не работать на 100% (я не могу протестировать его на веб-сервере, и документ изолирован здесь, во фрагменте, поэтому он не работает).

Дайте мне знать, если у вас возникнут какие-либо ошибки.

 $(function() {
  var view = localStorage.getItem('calendarView') || 'month';
  view = (view != undefined) ? view : 'basicWeek';
  $('#calendar').fullCalendar({
    'viewRender': function(view) {
      localStorage.setItem('calendarView', view.type);

    },
    'defaultView': view
  });
});  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.1/moment.min.js"></script>


<link href="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.0.1/fullcalendar.min.css" rel="stylesheet" />
<script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.0.1/fullcalendar.min.js"></script>
<div id="calendar">
</div>  

Комментарии:

1. Спасибо @Jhecht. Я использовал часть вашего кода и часть кода PLan ниже и решил ее.

Ответ №2:

Вы захотите сохранить представление, которое пользователь установил по умолчанию, в локальном хранилище.

В той же функции, которую вы используете для изменения представления по умолчанию, добавьте строку:

 localStorage.setItem("fc-custom-default", viewName);
  

где viewName строковое имя представления по умолчанию (например, «Базовая неделя»)

Затем customButtons: , при определении click обратного вызова функции для вашей кнопки просмотра по умолчанию, проверьте, существует ли ключ в хранилище, и если он существует, используйте это значение в качестве имени представления в функции ‘ChangeView’, которая вызывается при нажатии. В противном случае просто используйте стандартное значение по умолчанию. Это будет выглядеть примерно так:

 $("#calendar")
    .fullCalendar({
        customButtons: {
            defaultButton:{
                label: "Default View",
                click: function(){
                         var viewName = "month" //this is the default if nothing has been set
                         if(localStorage.getItem("fc-custom-default") !== null))
                         { 
                            viewName = localStorage("fc-custom-default");
                         }
                         $("#calendar").fullCalendar( 'changeView', viewName);
                     }
                 },
  

Вы также можете сохранить текущее значение по умолчанию в переменной вне функции click, чтобы не вызывать функцию для извлечения значения из хранилища при каждом нажатии.

Комментарии:

1. Спасибо @PLan. Я использовал часть вашего кода и часть кода Jhecht выше и разрешил его.

Ответ №3:

Я нашел наилучший подход для использования viewRender. Он вызывается каждый раз, когда изменяется представление календаря. Вот что я сделал:

 $('#calendar').fullCalendar({
    header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,agendaWeek,agendaDay,listWeek'
    },
    viewRender: function(view) {
        localStorage.setItem('Default_FullCalendar_View', view.name);
    },

    eventClick: function(calEvent, jsEvent, view) {
        if(calEvent.event_type == "Task"){
            LightviewOpen("/portal/Task.asp", "Update", "Task_ID", calEvent.id, "Update", 1200, 700);
        } else {
            window.open("LeadSystem/Lead.asp?New_Window=Trueamp;Open_Lead_ID="   calEvent.id);
        }
    },
    defaultView:localStorage.getItem("AI_Default_FullCalendar_View"),
    eventLimit: true, // allow "more" link when too many events
    navLinks: true,
    height: (window.innerHeight - $("footer").height() - $("#calendar").position().top)*.8,
    windowResize: function(view) {$('#calendar').height((window.innerHeight - $("footer").height()-$("#calendar").position().top)*.9);},
    eventSources:[
        {
            url:    'ajax.asp?serverside=PopulateCalendaramp;GetDownline=true',
            type:   'Post'
        }
    ]

})