contextMenu прерывая перетаскивание события FullCalendar - PullRequest
2 голосов
/ 12 августа 2011

Поэтому я недавно добавил контекстное меню к событиям в моем FullCalendar, используя jQuery contextMenu (http://abeautifulsite.net/blog/2008/09/jquery-context-menu-plugin/).). Это прекрасно работает, за исключением того, что моя способность перетаскивания перестала работать правильно, когда вы перетаскиваете событие и отпускаете другую дату дата события не изменяется, и он перенаправляет на URL-адрес события. Я провел некоторую проверку и понял, что не все события eventDrop, eventDragStart и eventClick запускаются. Если я закомментирую контекстное меню, все будет хорошо. Если кто-то может выяснить, почему contextMenu препятствует запуску обратных вызовов fullCalendar, я был бы признателен, так как contextMenu полностью соответствует моим потребностям. Код для contextMenu и обратных вызовов событий:

eventRender: function(event, element) {
    if (event.url.indexOf("https://www.google.com") != 0)
    {
      element.contextMenu({
        menu: "myMenu",
      },
      function(action, el) {
        if (action == "approve") {
          $.ajax({
            url: 'events/' + event.id,
            data: { 'event' : { 'status' : "Approved", } },
            type: "PUT",
          }),
          $('#calendar').fullCalendar('refetchEvents');
        } else if (action == "deny") {
          $.ajax({
            url: 'events/' + event.id,
            data: { 'event' : { 'status' : "Denied", } },
            type: "PUT",
          }),
          $('#calendar').fullCalendar('refetchEvents');
        } else if (action == "destroy") {
          if (confirm("Are you sure you want to delete this event?") ) {
            $.ajax({
                url: 'events/' + event.id,
                type: "DELETE",
            }),
            $('#calendar').fullCalendar('refetchEvents');
          }
        }
        else if (action == "edit") {
          window.location = 'events/' + event.id + '/edit'
        }
      }
      );
    }
  },

  eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc){
    updateEvent(event);
  },

  eventResize: function(event, dayDelta, minuteDelta, revertFunc){
      updateEvent(event);
  },

  eventClick: function(event) {
    if (event.url.indexOf("https://www.google.com") != 0) {
      $.facebox(function() {
        $.get('events/' + event.id,
          function(data) {
            $.facebox(data)
          }
        );
      })
      return false;
    }
    return false;
  }

Ответы [ 2 ]

1 голос
/ 09 июля 2012

Для тех, кто не хочет менять плагины, чтобы решить проблему с помощью контекстного меню, исправляющего перетаскиваемость, я изменил jquery.contextMenu.js

С:

$(this).mousedown( function(e) {
                var evt = e;
                evt.stopPropagation();
                $(this).mouseup( function(e) {
                    e.stopPropagation();
                    var srcElement = $(this);
                    $(this).unbind('mouseup');
                                            if (evt.button == 2) {

на

$(this).mousedown( function(e) {
                var evt = e;
                evt.stopPropagation();
                $(this).mouseup( function(e) {
                    if (evt.button == 2) {
                        e.stopPropagation();
                        var srcElement = $(this);
                        $(this).unbind('mouseup');

Это не позволяет плагину контекстного меню делать что-либо при щелчке левой кнопкой мыши, только при щелчке правой кнопкой мыши.

1 голос
/ 26 августа 2011

Ну, так как похоже, что на это не будет ответа, мое решение было переключиться на другой плагин контекстного меню (http://www.trendskitchens.co.nz/jquery/contextmenu/), который был очень похож и не вызывал никаких проблем с Full Calendar.для любой проблемы мешает этому плагину работать с полным календарем, но это исправление, чтобы моя программа работала правильно.

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