Объект события FullCalendar: нестандартные поля (GCal)

Точка устройства duffs состоит в том, чтобы уменьшить количество сравнений, выполненных в жесткой реализации memcpy.

Предположим, вы хотите скопировать байты «count» с a на b, прямой подход - сделать следующее:

  do {                      
      *a = *b++;            
  } while (--count > 0);

Сколько раз вам нужно сравнивать счетчик, чтобы увидеть, если он выше 0? «count».

Теперь устройство duff использует неприятный непреднамеренный побочный эффект корпуса коммутатора, который позволяет уменьшить количество сравнений, необходимых для подсчета / 8.

Теперь предположим, что вы хотите скопировать 20 байтов с помощью устройства duffs, сколько сравнений вам нужно? Только 3, поскольку вы копируете восемь байтов за раз, за ​​исключением последнего первого, где вы копируете только 4.

ОБНОВЛЕНО: вам не нужно делать 8 сравнений / case-in-switch, но это разумный компромисс между размером функции и скоростью.

3
задан ADyson 19 March 2019 в 09:37
поделиться

1 ответ

Когда в документах fullCalendar говорится

API Календаря Google позволяет вам указывать Расширенные свойства для ваших событий. Расширенные свойства будут доступны в виде хеша extendedProperties, который прикреплен к каждому объекту события.

они ссылаются на дополнительные настраиваемые поля, которые вы, возможно, определили в своих событиях Календаря Google - поля, которые не поддерживаются или не предоставляются API Календаря в качестве стандарта. Это поля, которые fullCalendar будет копировать как «дополнительные». не ссылается на «любые поля, которые fullCalendar обычно не считает стандартными».

Теперь, поскольку почти ни одна из структур данных событий, возвращаемых API-интерфейсом «Календарь», не будет отображаться непосредственно в структуру данных, которую fullCalendar требует от вас предоставить для создания допустимого объекта события (см. Список «стандартных» полей fullCalendar в Event Object docs ), мы не можем просто предоставить вывод JSON API-интерфейса Calendar напрямую в fullCalendar и ожидать, что он будет работать и автоматически сопоставлять поля.

Вот почему fullCalendar предоставил файл gcal.js в качестве вспомогательной утилиты для подключения к API, извлечения данных о событии и преобразования его в формат, ожидаемый и понятный для fullCalendar. Очевидно, что разработчики сделали выбор в отношении того, какие области они собираются перенести с одного на другое. Поскольку новый объект создается для передачи в fullCalendar, никакого автоматического сопоставления не существует - все зависит от того, что написано в коде. Обычно, если вы предоставляете JSON для fullCalendar direct, он также копирует любые другие поля, которые он находит в объекте, в дополнение к тем, которые он фактически распознает как «стандартные» (т. Е. Стандартные - те, которые он использует для конкретных целей, как объяснено в документация). Но опять же, поскольку код создает новые объекты для fullCalendar, этого также не происходит.

Кроме примечания о "extendedProperties", нет явной документации о том, какие поля копирует код из вывода API в объекты событий, совместимые с fullCalendar. Быстрый эксперимент с использованием console.log($("#calendar").fullCalendar("clientEvents")); на вашей странице покажет, какими свойствами обладают конечные события, но вы также можете посмотреть исходный код. На момент написания статьи последняя версия fullCalendar v3 была 3.10, а исходный код gcal.js для этой версии (доступен для просмотра здесь ).

Код содержит следующий фрагмент кода для преобразования данных API в объект fullCalendar:

    return {
        id: item.id,
        title: item.summary,
        start: item.start.dateTime || item.start.date,
        end: item.end.dateTime || item.end.date,
        url: url,
        location: item.location,
        description: item.description,
        extendedProperties: extendedProperties
    };

В своих вопросах и комментариях вы упомянули, что вас заинтересуют creator и description поля, которые предоставляет Calendar API. Это стандартные поля в GCal (согласно документам по представлению ресурсов ), и поэтому их не будет в коллекции "extendedProperties". Вы также можете видеть, что description уже скопирован в gcal.js, хотя это не поле, которое обычно использует fullCalendar - тем не менее, оно есть, если вы хотите использовать его в своем календаре.

Поэтому все, что вам нужно сделать, чтобы поле creator (или любое другое поле из свойств GCal) было доступно в ваших событиях fullCalendar, - это включить его в данные, которые копирует gcal.js. например :

    return {
        id: item.id,
        title: item.summary,
        start: item.start.dateTime || item.start.date,
        end: item.end.dateTime || item.end.date,
        url: url,
        location: item.location,
        description: item.description,
        extendedProperties: extendedProperties,
        creator: item.creator
    };

Конечно, если вы включаете gcal.js / gcal.min.js через CDN, вам нужно будет изменить свой код, чтобы вместо него разместить собственную измененную версию.


Кроме того, если вы считаете, что для проекта fullCalendar в целом было бы полезно иметь больше полей из GCal, включенных по умолчанию, то, поскольку fullCalendar является проектом сообщества с открытым исходным кодом, вы можете свободно [ 1111] сделайте запрос функции , чтобы получить изменения, внесенные в утилиту gcal (которая на самом деле является просто дополнительным удобством в качестве слоя между стандартной функциональностью fullCalendar и API Календаря Google), или даже сделайте вклад кода , содержащая предлагаемое изменение, для рассмотрения сопровождающими для включения в основной выпуск. В противном случае вы можете продолжить поддерживать свою модифицированную версию gcal.js или даже полностью заменить ее своей собственной утилитой для взаимодействия с Calendar API.

0
ответ дан ADyson 19 March 2019 в 09:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: