FullCalendar: как остановить перетаскивание пользовательских событий?

может ли кто-нибудь сказать мне, как остановить перетаскивание / изменение размера событий, где event.id > 100? Только эти события не должны затягиваться.

обновлено с образцом кода:

eventRender: function(event, element) {
    if (event.id > 100) {
        event.disableDragging();
        event.disableResizing();
    }

    element.qtip({
        content: GetEventToolTip(event),
        position: { corner: { tooltip: 'bottomLeft', target: 'topMiddle'} },
        style: {
            border: {
                width: 1,
                radius: 5
            },
            padding: 5,
            textAlign: 'left',
            tip: false,
            name: event.iscustom == 'True' ? 'cream' : 'dark'
        }
    });
}

спасибо.

12 ответов


ни disableDragging, ни disableResizing are функции определено в fullcalendar по состоянию на 1.4.8. Я уверен, что 2 человека в мире не пробовали первое предложение :) тем не менее, вам нужно будет нажать на сам объект jQuery UI, чтобы отключить перетаскивание или изменение размера на уровне события. Поэтому (вместо того, чтобы пытаться использовать несуществующие функции) попробуйте это в своем eventRender(event, element) обратного вызова:

if (event.id > 100) {

    element.draggable = false;

}

обратите внимание, что я просто устанавливаю свойство на самом элементе jQuery поскольку это относится к перетаскиваемому поведению UI.

то же самое касается изменения размера, за исключением того, что вам нужно будет удалить div (class = ui-resizable-handle ui-resizable-s), который добавляется fullcalendar, идентифицируя его с помощью селектора jquery и удаляя его (просто не забудьте установить уникальное имя класса для каждого события в массиве событий yoru, чтобы вы могли легко идентифицировать его в DOM). Пожалуйста, подайте петицию разработчику(разработчикам) fullcalendar, чтобы добавить disableDragging и disableResizing свойства объекта события. Это займет меньше минуты чтобы добавить поддержку для этого источника.


eventRender: function(event, element) {
    if (event.id.indexOf("IDENTIFYING_STRING") == -1) 
    {
        event.editable = false;
    }                       
}

это сработало идеально для меня:

if ( event.id > 100 ) {
  element.draggable = false;
  element.resizable = false;
}

Это лучшее решение:

$('#calendar').fullCalendar({
    disableDragging = true
});

Я бы сказал так:

if(event.id > 100)
{
   event.disableDragging();
   event.disableResizing();
}

FullCalendar v1.6.4

eventRender: function(jsEvent, element) {

 if(jsEvent.id > 100) {

    jsEvent.startEditable    = false;
    jsEvent.durationEditable = false;
  }

  return element;             
}

Это решение работает для меня как шарм.

я реализовал эту библиотеку JS с Ruby Gem "Fullcalendar_engine".


вы должны взломать fullcalendar.js

раскомментировать строки

t.isEventDraggable = isEventDraggable;
t.isEventResizable = isEventResizable;

заменить функции:

function isEventDraggable(event) {
         return isEventEditable(event) && !opt('disableDragging') &&
            !event.disableDragging;
}


function isEventResizable(event) { // but also need to make sure the seg.isEnd == true
         return isEventEditable(event) && !opt('disableResizing') &&
            !event.disableResizing; 
}

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


ни element.draggable = false и event.ediable = false работал для меня. Это должно быть из-за более новой версии FullCalendar. Если это и ваш случай, попробуйте:

if ( event.id > 100 ) {
    event.startEditable = false;
}

работал для меня.

в качестве альтернативы вы можете отменить событие move после падения:

eventDrop: function (event, delta, revertFunc) {

            if (event.id < 100) 
                revertFunc();
        }

в редактируемом просто напишите false, и он не сможет перетаскивать редактируемый: false


у меня не было успеха с помощью методов, показанных здесь. В итоге я взломал fullcalendar.JS, чтобы добавить noDragging вариант для событий, который на самом деле был очень простым:

оригинал:

function isEventDraggable(event) {
    return isEventEditable(event) && !opt('disableDragging');
}

изменил его на:

function isEventDraggable(event) {
    return isEventEditable(event) && !opt('disableDragging') && !event.noDragging;
}

просто добавил чек для event.noDragging.


используйте эти теги при создании fullcalendar, чтобы отключить перетаскивание или изменение размера.

**>  $('#calendar').fullCalendar({
> 
>    editable: false,
> 
> //the rest of your code... }**

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

 $('#calendar').fullCalendar({
    disableResizing:true,
    disableDragging:true,

    //the rest of your code...

disableDragging: Boolean,по умолчанию: false Отключает перетаскивание всех событий, даже если события доступны для редактирования.

disableResizing: Boolean,по умолчанию: false Отключает все события resizing, даже когда события являются редактируемыми.