【问题标题】:Only allow editable = true on specific events in FullCalendar仅在 FullCalendar 中的特定事件上允许 editable = true
【发布时间】:2018-10-09 11:52:47
【问题描述】:

我正在尝试让 FullCalendar 仅允许 event Resize 如果两个特定的 id 匹配,但我无法让它工作。

本质上,我是在一个组件中加载 FullCalendar。该组件有一个唯一的 ID,表示为日历上的一个事件。日历加载到页面后,如何确保仅将 editable: true 设置为该特定事件?请参阅下面的eventRender,了解我希望实现的伪代码

loadDataToCalendar: function(component, salesAppointments, resExceptions) {
    let myEventid;
    var ele = component.find('calendar').getElement();
    $(ele).fullCalendar({
        eventResize: function(event) {
            component.set("v.startTime", event.start._d);
            component.set("v.endTime", event.end._d);
            component.set("v.showSaveButton", true)
        },
        eventRender: function(event) {
            if (event.id === myUniqueIdHere) {
                event.editable = true // this is what I'm trying to achieve
            }
        },

        header: {
            left: 'prev, next, today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay',
        },

        eventOverlap: false,
        defaultView: 'agendaWeek',
        editable: false,
        eventLimit: true,
        eventSources: [salesAppointments, resExceptions],
        timezone: 'local',
    });
},

所以默认情况下,我希望editable 为假。当日历呈现并具有匹配的 ID 时,我需要将该特定事件设置为可编辑:true。我将如何实现这一目标?我试过使用eventRender 没有 成功。

【问题讨论】:

  • 文字和标题说这是关于“可编辑”的,尽管第一行令人困惑......“我正在尝试让 FullCalendar 只允许调整事件大小” - 应该是“可编辑” ??
  • eventResize 是 FullCalendar 中的函数,允许您拖动事件并使其变长/变短
  • 是的,尽管问题的其余部分(包括“if”)都是关于“可编辑”的,这是关于修改事件数据的.....如果你真的意味着你只想要它要使用某个 ID 调整大小,那么您应该更改您的问题以显示您正在尝试的与该 ID 相关的代码。不过,在大多数情况下,我相信我的答案是你应该走的方向。如果没有,请说明您要做什么。

标签: javascript fullcalendar salesforce-lightning


【解决方案1】:

您应该在生成事件的服务器端进行比较。

Fullcalendar(以及大多数此类程序)无法像您尝试做的那样“即时”更改内容 - 您通常必须先在服务器上设置内容,并且这些程序可以根据你给的设置。

所以,在你的事件中,你应该为你想要的设置 editable = true 。 https://fullcalendar.io/docs/event-object

您不能(嗯,不容易 - 可能有一种非常迂回的方式,但我认为不值得尝试)在“渲染”中执行此操作,但如果您检查服务器端。

当我说“服务器端”时,我的意思是“进入全日历的数据”。由于您在“salesAppointments”和“resExceptions”中有这些内容,因此您可以在 javascript 中进行一些操作 - 但同样,不能在 fullcalendar 部分中进行操作 - 类似于:

 loadDataToCalendar: function(component, salesAppointments, resExceptions) {
    let myEventid;
    $(salesAppointments).each(function(event)){
        if (event.id === myUniqueIdHere) {
            event.editable = true;
        }    
    }
    $(resExceptions).each(function(event)){
        if (event.id === myUniqueIdHere) {
            event.editable = true;
        }    
    }
    var ele = component.find('calendar').getElement();
        $(ele).fullCalendar({
            eventResize: function(event) {
                component.set("v.startTime", event.start._d);
                component.set("v.endTime", event.end._d);
                component.set("v.showSaveButton", true)
        },
        header: {
            left: 'prev, next, today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay',
        },
        eventOverlap: false,
        defaultView: 'agendaWeek',
        editable: false,
        eventLimit: true,
        eventSources: [salesAppointments, resExceptions],
        timezone: 'local',
    });
},

【讨论】:

  • @Stnfordly - 我不确定你在问什么。如果您还有其他问题,请直接打开它并显示您正在使用的代码并指出您遇到的问题——SO 是建立在帮助他人修复代码的基础上的——而不是为你编写代码。也许如果您更清楚在此解决方案上需要什么帮助,那么某人也可以提供帮助。但是“提供可行的解决方案......”听起来像是“为我编写代码”,我很乐意这样做,但我与客户的合同迫使我为此收费。如果您需要帮助,请将您的代码显示为问题,或者更清楚地说明您遇到问题的地方。
猜你喜欢
  • 2018-02-24
  • 2012-05-02
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
相关资源
最近更新 更多