【问题标题】:Fullcalendar updateEvent doesn't rerenderFullcalendar updateEvent 不会重新渲染
【发布时间】:2018-12-11 23:50:42
【问题描述】:

我想通过全日历向我的数据库添加事件。所以我想添加一个事件并将其 id 设置为它在我的数据库中获得的 id。

function addCalEvent(event) {
  var jEvent = {};
  jEvent['startTime'] = moment(event.start).unix();
	jEvent['worker']="GUZ"
	jEvent['title']=event.title;
  if (event.end) {
    jEvent['endTime'] = moment(event.end).unix();
  }
  $.ajax({
    url: 'dux.html',
    type: 'POST',
    data: {
      type: 'addNewEvents',
      event: jEvent,
			REQUEST_TOKEN: "REQUEST_TOKEN>",
    },
    datatype: 'json',
		success: function(data) {
		  event.id=data;
			event.title="NEW";
			$('#calendar').fullCalendar('updateEvent', event);
		},
});
}

ajax 检索添加事件的 id,并且 id 和 title 确实发生了变化,但似乎没有调用 'updateEvent' 方法,因为呈现的事件标题或 id 没有变化。

【问题讨论】:

  • 您如何将新活动添加到日历中?
  • 我在'dayClick'函数中调用'renderEvent',之后调用addCalEvent。
  • event.id=data 这确实是我认为的问题。更改 ID 后,fullCalendar 无法将其与现有事件匹配(因为如果您在第一次创建事件时没有提供事件 ID,fullCalendar 会自动为您分配一个)。但是你的逻辑是从头到尾的......你应该做的是首先将事件数据发送到你的服务器,然后取回 ID。只有这样,当您知道服务器已接受事件并成功保存它时,您是否应该使用 renderEvent 在 fullCalendar 中创建事件。然后你根本不需要 updateEvent。
  • @ADyson 我同意 ADyson 的观点。根据文档,您无法更新自己创建的事件,它必须是来自日历的事件,例如事件在eventClick 返回。所以我认为最好的做法是 ADyson 建议的,发送ajax 请求以在dayClick 事件中从您的数据库中获取事件ID,然后使用该ID,创建您的事件,然后调用renderEvent跨度>

标签: javascript jquery fullcalendar


【解决方案1】:

好的, 显然,如果您进行异步 ajax 调用,则执行命令的顺序不是您编写它的顺序。 我需要添加 async: false 才能使这项工作。

【讨论】:

    【解决方案2】:

    您可以使用$('#calendar').fullCalendar( ‘rerenderEvents’ )手动调用重新渲染事件

    链接到文档here

    【讨论】:

    • 但我不想重新渲染所有事件。这就是我想使用“updateEvent”方法的原因。
    • 你能添加一个你的问题的 jsfiddle 吗?
    猜你喜欢
    • 2012-05-22
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2020-04-18
    相关资源
    最近更新 更多