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

#javascript #reactjs #fullcalendar #fullcalendar-scheduler #fullcalendar-5

#javascript #reactjs #полный календарь #fullcalendar-планировщик #полный календарь-5

Вопрос:

Я использую компонент FullCalendar React с представлением временной шкалы ресурсов. Моя цель — получать только события для области, которую пользователь действительно может видеть. Из-за структуры моего API я не могу предоставить канал JSON. Итак, согласно документам, события являются функцией. Я начал реализовывать решение для этого подхода, но проблема в том, что функция вызывается только тогда, когда я фактически нажимаю кнопку для следующего или предыдущего, но не тогда, когда я просто прокручиваю временную шкалу, но это то, что мне действительно нужно. Возможно ли это с помощью Fullcalendar? Чтобы вам было как можно проще воспроизвести это поведение, вот компонент, который я реализовал:

 import FullCalendar from '@fullcalendar/react'
import resourceTimelinePlugin from '@fullcalendar/resource-timeline';

function App() {
  return (
    <FullCalendar
        plugins={[ resourceTimelinePlugin ]}
        initialView="resourceTimelineYear"
        schedulerLicenseKey = "CC-Attribution-NonCommercial-NoDerivatives"
        resources={
          [
            {id: "a",title: "Room A"},
            {id: "b",title: "Room B"},
            {id: 'c',title: 'Room C'}
          ]
        }
        events={
          function(fetchInfo, successCallback, failureCallback) {
            console.log("Call!"); /* only called when prev. or next button is 
            pressed but not when scrolling through the timeline */
          }
        }
        height={650}
      />
  );
}

export default App;
 

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

1. Is this achievable with Fullcalendar … нет, потому что календарь не может знать, что в данный момент отображается на экране. Он не знает ширину календаря в этот точный момент (а что, если вы измените размер области просмотра во время использования?) и, следовательно, что видно / не видно. Потенциально это также может привести к большому количеству ненужных запросов. Он будет извлекать события для определенных дат начала и окончания. Кажется, вы указали целый год. Если вы не собираетесь легко отображать весь год сразу, то, возможно, вместо этого определите представление как месяц или 3-месячный период?

2. @ADyson Спасибо за быстрый ответ. Итак, теперь, когда я знаю, что это нельзя сделать с помощью прокрутки, мой вариант будет заключаться в том, что пользователь использует предыдущие и следующие кнопки для навигации, чтобы работать с правильной выборкой событий как функцией, верно? Поэтому каждый раз, когда он нажимал одну из этих кнопок, вызывалась моя функция, и события за указанный промежуток времени внутри fetchInfo помещались в календарь. Правильно ли я понимаю здесь?

3. да, это так. Если бы это был я, я бы установил меньший период времени для просмотра (например, 1 месяц или, возможно, 3 месяца, как я уже упоминал), а затем пользователь может использовать next / prev для перехода дальше вперед или дальше назад. Затем это приведет к запуску функции events и запросу новых событий каждый раз, когда они переходят к периоду времени, для которого события еще не были загружены.

4. Спасибо за разъяснение, месяц для просмотра кажется мне разумным. С точки зрения пользователей немного грустно, что это невозможно сделать с помощью прокрутки, но, как вы упомянули в своем первом сообщении, если бы это можно было сделать, это было бы действительно сложно. Поэтому я воспользуюсь подходом к решению, который вы посоветовали. Еще раз спасибо за быстрые и действительно полезные пояснения здесь.