【问题标题】:Fullcalendar 4: update info event from modal BootstrapFullcalendar 4:从模式引导更新信息事件
【发布时间】:2020-07-11 01:49:59
【问题描述】:

我正在尝试从 Fullcalendar 版本 4 中的模式引导更新信息日期事件。 我的测试:

  1. 读取事件json
  2. 单击事件日历,打开模式,显示信息事件并设置要更新信息的字段值
  3. 当我点击绿色按钮“Salva”(保存)时,doSubmitEdit 函数被调用。这应该:
    • 关闭模态;
    • 接收已编辑的文本字段;
    • 通过 ajax 更新我的数据库;
    • 如有必要,更新日历事件

但是当点击按钮时我有这个错误:

q TypeError:calendar.fullCalendar 不是函数 在这条线上: var event_obj_arr = calendar.fullCalendar('clientEvents', calendario_id);

(function ($) {

    'use strict';
    var calendarEl = document.getElementById('calendar');

    var calendar = new FullCalendar.Calendar(calendarEl, {
        locale: 'it',
        plugins: ['dayGrid', 'timeGrid', 'list', 'interaction', 'bootstrap'],
        themeSystem: 'bootstrap',
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
        },
        navLinks: true, // can click day/week names to navigate views
        selectable: true,
        selectMirror: true,
        editable: true,
        eventLimit: true, // allow "more" link when too many events
        events: {
            url: '/_admin/vendor/fullcalendar/php/get-events.php',
            failure: function () {
                document.getElementById('script-warning').style.display = 'block';
            }
        },
        eventClick: function (info) {
            $('.card-body h4').html(info.event.start.toDateString());
            $('.card-body p').html(info.event.title + '<br>' + info.event.extendedProps.autista + ' / Info: ' + info.event.extendedProps.autista_description);
            $('#calendario_id').val(info.event.id);
            $('#btnModal').trigger('click');
        },
        loading: function (bool) {
            document.getElementById('loading').style.display =
                bool ? 'block' : 'none';
        }//,
    });

    calendar.render();

    $('#submitButtonEdit').on('click', function (e) {
        // We don't want this to act as a link so cancel the link action
        e.preventDefault();
        doSubmitEdit();
    });

    function doSubmitEdit() {

        // get event object
        var event_obj_arr = calendar.fullCalendar('clientEvents', calendario_id);
        var event_obj = event_obj_arr[0];

        // edit
        $("#createEventModalEdit").modal('hide');
        console.log($('#autista_description').val());
        console.log($('#calendario_id').val());

        // update event object properties
        event_obj.extendedProps.autista_description = $('#autista_description').val();

        // post to server
        $.ajax({
            url: '/_admin/vendor/fullcalendar/php/planning-aggiorna.asp',
            data: 'type=changetitle&title=' + title + '&calendario_id=' + calendario_id,
            type: 'POST',
            dataType: 'json',
            success: function (response) {
                if (response.status == 'success') {
                    // nothing to do here

                    // update calendar, you may put this line into success method
                    calendar.fullCalendar('updateEvent', event_obj);
                }
            },
            error: function (e) {
                alert('Error processing your request: ' + e.responseText);
            }
        });
    }
}).apply(this, [jQuery]);

是否可以在它之外访问 fullcalendar 类? 谢谢。

【问题讨论】:

  • calendar.fullCalendar('clientEvents' 是 v3 中的旧语法和方法名称。根据upgrade guide,v4 中的替换是getEvents,你可以写成var event_obj_arr = calendar.getEvents());。稍后在您的代码中,您将遇到与 calendar.fullCalendar('updateEvent' 类似的问题。阅读升级指南,确保您了解 v3 和 v4 之间的所有区别!
  • code // 从模态表单中获取值 var calendario_id = $('#calendario_id').val(); var calendario_descrizione = $('#calendario_descrizione').val(); // 通过 id 获取事件对象 var event = calendar.getEventById(calendario_id); var title = event.title; // 如果成功则更新日历 event.setProp('title', title + ' changed'); event.setExtendedProp('autista_description', calendario_descrizione);
  • 好的。您想通过显示该代码来告诉我什么?这是解决方案吗?还是新的问题?目前还不清楚。但是代码无论如何都不属于 cmets 部分。如果这是您的解决方案,请将其(并附上解释)添加到下面的“答案”部分。如果是新问题,请使用“编辑”按钮更改上面的主要问题。谢谢。
  • 对不起,这是解决方案。我尽快添加它...谢谢

标签: javascript jquery fullcalendar fullcalendar-4


【解决方案1】:

感谢@Adison,这是解决方案。 我们从模态表单中检索元素,更新实时日历(我将“更改”文本附加到事件标题)和更新数据库。

    function doSubmitEdit() {
        // get values from modal form
        var calendario_id = $('#calendario_id').val();
        var calendario_descrizione = $('#calendario_descrizione').val();

        // get event object by id
        var event = calendar.getEventById(calendario_id);
        var title = event.title;

        // post to server and update db
        $.ajax({
            url: '/_admin/planning-aggiorna.asp',
            data: 'calendario_descrizione=' + encodeURIComponent(calendario_descrizione) + '&calendario_id=' + calendario_id,
            type: 'POST',
            dataType: 'text',
            success: function (response) {
                if (response == 'success') {
                    // update calendar
                    event.setProp('title', title + ' changed');
                    event.setExtendedProp('autista_description', calendario_descrizione);
                }
            },
            error: function (e) {
                alert('Error processing your request: ' + e.responseText);
            }
        });
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    相关资源
    最近更新 更多