代码之家  ›  专栏  ›  技术社区  ›  Prafulla Kumar Sahu umang naik

以引导模式获取新的完整日历事件

  •  1
  • Prafulla Kumar Sahu umang naik  · 技术社区  · 6 年前

    我正在使用引导模式来显示事件详细信息。单击事件时,弹出窗口中将显示开始、结束和标题。

    事件是使用boostrap模式表单创建的。

    这是密码

    $(function() {
      $('#calendar').fullCalendar({
        header: { 
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
         },
        views: {
          month: {
            titleFormat: 'YYYY, MM, DD'
          }
        },
        validRange: function(nowDate) {
          return {
            start: nowDate,
            end: nowDate.clone().add(1, 'months')
          };
        },
        navLinks: true,
        selectable: true,
        selectHelper: true,
        select: function(start, end) {
          startDate = moment(new Date(start)).format("MM-DD-YYYY");
          $('#createBookingModal .modal-header .modal-title span').text(startDate);
          $('#createBookingModal').modal('show');
        },
        editable: true,
        eventLimit: true, // allow "more" link when too many events
        events: function(start, end, timezone, callback){
          $.ajax({
            url: '/api/bookings',
            dataType: 'json',
            data: {
                start: start.unix(),
                end: end.unix(),
            },
            success: function(response){
              var events = [];
              $(response).each(function(){
                events.push({
                    title: $(this).attr('title'),
                    start: $(this).attr('start_time'),
                    end: $(this).attr('end_time'),
                });
              });
              callback(events);
            }
          });
        },
        eventClick: function(event, jsEvent, view) {
          //Todo
          //Get event end date here
          console.log(event);
          startDate = moment(new Date(event.start)).format("MM-DD-YYYY");
          endDate = moment(new Date(event.end)).format("MM-DD-YYYY");
    
          $('#modalTitle').text(event.title);
          $('#modalBody .start span').text(startDate);
          $('#modalBody .end span').text(endDate);
          $('#fullCalModal').modal('show');
        },
    
        loading: function(bool) {
            $('#loading').toggle(bool);
        }
      });
    
      $('#submitButton').on('click', function(e){
          e.preventDefault();
          doSubmit();
      });
    
      function doSubmit(){
        //validate end date here
        endDate = new Date($('#bookingEndDate').val());
        if (! moment(endDate, 'MM/DD/YYYY', true).isValid() ){
          alert('Invalid Date');
        } else {
          eventData = {
            title: $('#bookingName').val(),
            start: new Date($('#createBookingModal .modal-header .modal-title span').text()),
            end: endDate
          };
          $.ajax({
              url: '/api/bookings/create',
              data: {
                title: eventData.title,
                start_time: eventData.start,
                end_time: eventData.end
              },
              success: function(response){
                console.log(response);
                // if ( response == 0 ){
                //   alert('Invalid Date');
                //   return false;
                // } else {
                //   return true;
                // }
              }
            });
            $('#createBookingModal form').get(0).reset();
            $("#createBookingModal").modal('hide');
            $("#calendar").fullCalendar('renderEvent', eventData, true);
            $('#calendar').fullCalendar('unselect');
        }
      }
    });
    

    HTML代码

    <div class="card-body full-calendar">
                        <div id='calendar'></div>
                        <!-- Display Create Booking form in modal -->
                        <div id="createBookingModal" class="modal fade">
                            <div class="modal-dialog">
                                <div class="modal-content">
                                    <div class="modal-header">
                                        <h4 class="modal-title">Add an Booking on: <span class="startDate"></span>></h4>
                                        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span> <span class="sr-only">close</span></button>
                                    </div>
                                    <div id="modalBody" class="modal-body">
                                        <form>
                                            <div class="form-group">
                                                <label for="bookingName">Booking Title</label>
                                                <input class="form-control" type="text" placeholder="Booking Name" id="bookingName">
                                            </div>
    
                                            <div class="form-group">
                                                <label for="bookingEndDate">End Date</label>
                                                <div class="input-group date" data-provide="datepicker">
                                                    <input type="text" id="bookingEndDate" class="form-control" placeholder="mm/dd/yyyy">
                                                    <div class="input-group-addon">
                                                        <span class="glyphicon glyphicon-calendar"></span>
                                                    </div>
                                                </div>
                                            </div>
    
                                            <!--<div class="form-group">
                                                <textarea class="form-control" type="text" rows="4" placeholder="Booking Description" id= "eventDescription"></textarea>
                                            </div>-->
                                        </div>
                                        <div class="modal-footer">
                                            <button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
                                            <button type="submit" class="btn btn-primary" id="submitButton">Save</button>
                                        </div>
                                    </form>
                                </div>
                            </div>
                        </div>
                    </div>
                    <!-- Display Booking in modal -->
                    <div id="fullCalModal" class="modal fade">
                        <div class="modal-dialog">
                            <div class="modal-content">
                                <div class="modal-header">
                                    <h4 id="modalTitle" class="modal-title"></h4>
                                    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span> <span class="sr-only">close</span></button>
                                </div>
                                <div id="modalBody" class="modal-body">
                                    <p class="start">Start At: <span></span></p>
                                    <p class="end">End At: <span></span></p>
                                </div>
                                <div class="modal-footer">
                                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                                   <!-- <button class="btn btn-primary"><a id="eventUrl" target="_blank">Event Page</a></button>-->
                                </div>
                            </div>
                        </div>
                    </div>
    

    当尝试以模态方式显示新创建的事件时,我没有得到它的结束日期,您可以注意到 //todo ,这就是我想要的结束日期。可能需要委派,但我不知道应该如何完成?

    我加了一把小提琴 here ,你可以看到,结束日期是“01-01-1970”,因为 eventClick() 没有得到结束日期。

    更新 只有当你给出相同的开始和结束日期时才会发生。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Prafulla Kumar Sahu umang naik    6 年前

    我只解决了一个小问题,如果有人有更好的解决方案,请随时张贴。

    eventClick: function(event, jsEvent, view) {
          if ( event.end == null ){
            event.end = event.start;
          }
          startDate = moment(new Date(event.start)).format("MM-DD-YYYY");
          endDate = moment(new Date(event.end)).format("MM-DD-YYYY");
    
          $('#modalTitle').text(event.title);
          $('#modalBody .start span').text(startDate);
          $('#modalBody .end span').text(endDate);
          $('#fullCalModal').modal('show');
        },
    

    *@阿迪森在这个解决方案上有很大贡献,我本来想在我们讨论后把这个作为答案贴出来,他没有贴出来,所以我就贴出来了。

        2
  •  0
  •   SimoNR    6 年前

    我也有类似的问题(大约两年前!)必须使用submitHandler:function(){}如下

     submitHandler: function (form) {
                    var dataRow = CreateDataSetup();
                    $.ajax({
                        type: 'POST',
                        url: "/BookingTwo/SaveEvent",
                        data: dataRow,
                        success: function () {
                            $("#myform")[0].reset();
                            ClearPopupFormValues();
                            $('#popupEventForm').modal('hide');
                        },
                        statusCode: {
                            201: function (response) {
                                $('#calendar').fullCalendar('refetchEvents');
                                ClearPopupFormValues();
                                showAlert("Success Event Created.", "success", 4000)
                            },
                            500: function (response) {
                                $('#calendar').fullCalendar('refetchEvents');
                                ClearPopupFormValues();
                                showAlert("Internal Server Error - Logged with System Admins", "danger", 4000)
                                $('#popupEventForm').modal('hide');
                            },
                            400: function (response) {
                                $('#calendar').fullCalendar('refetchEvents');
                                ClearPopupFormValues();
                                showAlert("Duration Service Returned 0 - Event NOT Created.", "danger", 4000)
                                $('#popupEventForm').modal('hide');
                            },
                            401: function (response) {
                                $('#calendar').fullCalendar('refetchEvents');
                                ClearPopupFormValues();
                                showAlert("Warning - You do not have permission to delete this.", "danger", 4000)
                                $('#popupEventForm').modal('hide');
                            },
                            403: function (response) {
                                $('#calendar').fullCalendar('refetchEvents');
                                ClearPopupFormValues();
                                showAlert("Warning - Can't delete approved events.", "danger", 4000)
                            },
                            409: function (response) {
                                $('#calendar').fullCalendar('refetchEvents');
                                ClearPopupFormValues();
                                showAlert("There is already an event for the user for this date.", "danger", 4000)
                            }
                        }
                    });
                }
    

    还创建了一个数据设置函数-

        function CreateDataSetup() {
        console.log("Attempting to Setup POST Values...")
        var intEtad = parseInt($('#ETADType').val());
        var intEtadSub = parseInt($('#ETADSubType').val());
    
        var normStart = $('#LeaveStart').val();
        var normEnd = $('#LeaveFinish').val();
    
        var ahStart = $('#ADHOCLeaveStart').val();
        var ahEnd = $('#ADHOCLeaveFinish').val();
    
        var dataRow = {
            'Id': $('#id').val(),
            'Subject': $('#title').val(),
            'Description': $('#customdescription').val(),  
            'StartTime': normStart,
            'EndTime': normEnd,   
            'AHStartTime': ahStart,
            'AHEndTime': ahEnd,
            'SelectRole': $('#SelectRole').val(),
            'ETADType': intEtad,
            'ETADSubType': intEtadSub,
            'StaffID': $('#StaffID').val(),
            'EventStatus': $('#EventStatus').val(),
            'AllRoles': $('#AllRoles').is(':checked'),
            'AllDay': $('#AllDay').is(':checked'),      
            'AM': $('#AM').is(':checked'),
            'PM': $('#PM').is(':checked'),
            'ADHOC': $('#ADHOC').is(':checked'),
    
        };
    
        console.log("Setup Complete");
        return dataRow;
    }