Полный календарь - refetchResources

Я не понимаю, как получить ресурсы по URL-адресу (канал json).

Это отображает мои ресурсы календаря -

   $('#calendar').fullCalendar({
     ...
     resources: 'example.json?id=1',
     ...
   });

В этой документации (https://fullcalendar.io/docs/refetchResources) говорится: «Если бы параметр ресурсов был указанный как JSON-канал, он будет запрошен снова ".

Итак, у меня есть кнопка, которую я хочу нажать, чтобы изменить URL-адрес ресурса и перезагрузить канал ресурсов -

 $('.resource-button').on('click', function() {
    link = $(this).attr('href');
    $('#calendar').fullCalendar('refetchResources', {
      resources: link
    });
 });

Есть идеи, почему он не перезагружает новую ссылку на ресурс? Список ресурсов обновляется, как будто он что-то делает, но данные остаются прежними.

Спасибо


person scottkekoa    schedule 24.03.2018    source источник


Ответы (1)


Этот код

$('#calendar').fullCalendar('refetchResources', {
      resources: link
 });

не имеет смысла. Согласно документации, на которую вы ссылаетесь, метод refetchResources не принимает никаких дополнительных аргументов. Объект { resources: link }, который вы ему передаете, не ожидается и, следовательно, fullCalendar игнорирует. Я не уверен, что натолкнуло вас на мысль, что вы можете передать этой функции больше аргументов.

Процитированная вами фраза:

«Если параметр ресурсов был указан как канал JSON, он будет запрошен снова».

означает, что он повторно извлечет существующие данные ресурсов из существующих указанных источников (отсюда и слово «снова»). Я думаю, вы неправильно поняли это объяснение.

Другими словами, все, что он делает, это обновляет уже указанные источники. Если вы хотите изменять список ресурсов динамически, вам нужно сначала установить параметр ресурсов, используя отдельный метод для установки параметров.

Вот пример, который переключает ресурсы с одного URL-адреса на другой при нажатии кнопки. Вы, конечно, можете настроить это в соответствии со своими потребностями, но главное, что следует отметить, - это использование отдельного метода «option» для изменения URL-адреса ресурса перед вызовом «refetchResources».

HTML:

<button type="button" id="changeResources">
Click to Change Resources
</button>

<div id='calendar'></div>

JavaScript:

var resources = [
 "https://api.myjson.com/bins/m7blz",
 "https://api.myjson.com/bins/cqj3b"
]
var currentResourceIndex = 0;

$(document).ready(function() {

    $('#calendar').fullCalendar({
    resources: resources[currentResourceIndex],
    schedulerLicenseKey: 'CC-Attribution-NonCommercial-NoDerivatives',
    defaultView: 'timelineDay',
    header : {
        left: 'prev, today',
        center: 'title',
        right: 'next'
    },
    });

    $("#changeResources").click(function() {
      if (currentResourceIndex == 0) currentResourceIndex = 1;
      else currentResourceIndex = 0;
      $('#calendar').fullCalendar('option', 'resources', resources[currentResourceIndex]);
      $("#calendar").fullCalendar("refetchResources");
    });
});

См. http://jsfiddle.net/toytd26b/57/ для рабочей демонстрации переключения ресурсов. с помощью кнопки (согласно приведенному выше коду).

Документацию о том, как установить параметры календаря после инициализации календаря.

person ADyson    schedule 26.03.2018
comment
Это было немного проще, чем ваше решение, но вы получили то, что мне нужно, с помощью опции - person scottkekoa; 29.03.2018
comment
Не беспокойтесь, это была всего лишь демонстрация принципа. Ваш ответ, использующий свойства кнопки / ссылки для хранения URL-адреса ресурса, является изящным. - person ADyson; 30.03.2018
comment
Спасибо. Я использую его для фильтрации потока ресурсов JSON, что очень полезно. - person scottkekoa; 01.04.2018
comment
Бывший. '/resources.json?ID=2'. Каждая кнопка заполняется из базы данных с помощью идентификатора, и для отображения этого ресурса потребуется этот атрибут. - person scottkekoa; 01.04.2018