首页 文章

从ngDialog模式修改FullCalendar事件信息(开始和结束)

提问于
浏览
1

我正在使用ui-calendar指令进行arshaw的fullcalendar和可拖动的外部事件 .

我希望能够通过弹出对话框上的文本框编辑 Headers ,开始和结束,而无需在日历本身上拖动事件 . 我使用ngDialog作为模态,可以通过控制器的范围访问被点击的事件 . 日历上的事件 Headers 响应更改,但开始和结束时间不响应 .

当我在模态中单击保存时,我将更新的信息传递给函数( $scope.updateEventInfo ),在那里我通过id找到特定的clientEvent,然后更新clientEvent属性 .

然后我调用fullCalendar updateEvent( .fullCalendar( 'updateEvent', event )

新 Headers 将在日历上呈现,但开始和结束时间不会 .

我需要以某种方式格式化或重新分配开始和结束时间吗?

控制器:

$scope.updateEventInfo = function(clickedEvent) {
        var newTitle = clickedEvent.title;
        var newStart = clickedEvent._start;
        var newEnd = clickedEvent._end;
        var clientEvent = uiCalendarConfig.calendars.myCalendar.fullCalendar('clientEvents', clickedEvent._id);
        clientEvent[0].title = clickedEvent.title;
        clientEvent[0].start = newStart;
        clientEvent[0].end = newEnd;
        uiCalendarConfig.calendars.festivalLineup.fullCalendar('updateEvent', clickedEvent); 
      }

    $scope.eventSources = [{
        events: [],
        color: '#428bca',
        textColor: 'white',
        overlap: false
      }]
    $scope.uiConfig = {
        calendar: {
          header: {
            left: 'prev,next today',
            center: 'title',
            right: 'agendaDay,agendaTwoDay,week'
          },
          defaultView: 'agendaDay',
          height: 'auto',
          editable: true,
          droppable: true,
          eventClick: function(clickedEvent) {
            $scope.clickedEvent = clickedEvent;
            $scope.openModal('EditCalendarEvent');
          },
        }
      };

ngDialog代码:

<div class="modal-container">    
  <h4>{{clickedEvent.title}}</h4>
  <form>
      <div class="input-field">
        <input id="eventTitle" type="text" ng-model="clickedEvent.title"/>
        <label for="eventTitle">Event Title</label>
      </div>
      <div class="input-field">
        <input id="startTime" type="text" ng-model="clickedEvent.start"/>
        <label for="startTime">Event Start</label>
      </div>
      <div class="input-field">
        <input id="endTime" type="text" ng-model="clickedEvent.end"/>
        <label for="endTime">Event End</label>
    </div>
  </form>
      <button type="button" ng-click="updateEventTimes(clickedEvent)">Save</button>
</div>

1 回答

  • 0

    过去一周我一直在搞乱这个日历 . 我一直在做的更新特定事件的方法是从数组中拼接现有事件并推送新更新的事件 .

    $scope.saveEvent = function() {
        $scope.events.forEach(function(ev) {
            if (ev._id == $scope.selectedEvent._id) {
                $scope.events.splice($scope.events.indexOf(ev),1);
            }
        });
        $scope.events.push($scope.selectedEvent);
        $scope.closeModal();
    };
    

    我看到其他一些人使用相同的方法,并且推理与日历实例和javascript引用有关(我不是专家) .

    edit:

    实际上,我误解了你使用的方法,可能从过时的版本中提取了这个例子 .

    我能够通过使用以下方式更新事件和日期和时间: uiCalendarConfig.calendars.festivalLineup.fullCalendar('updateEvent', clickedEvent);

    你需要做的就是将 'clickedEvent' 更改为 'clickedEvent[0]'

    edit two:

    好的,所以我更多地搞乱它,我确实意识到是的,你必须将日期格式化为momentjs对象 . 像这样的东西:

    var newStart = moment(clickedEvent.start, , "MM/DD/YYYY HH:mm")

相关问题