如何在单击按钮时从FullCalendar中检索所有拖放的EventObjects数据
how to retrieve all dragged and dropped EventObjects data from FullCalendar on button click
我有一个完整的日历设置,你可以拖放外部事件,设置如下
http://jsfiddle.net/YwL2j/1/我想要完成的是在按钮上单击创建一个json对象与所有的拖放事件的格式看起来像这样。
[
{"startDate":"1399313811","endDate":"1399313123","name":"My Event 1"},
{"startDate":"1399313811","endDate":"1399313123","name":"My Event 2"},
{"startDate":"1399313811","endDate":"1399313123","name":"My Event 3"}
]
startDate和endDate在删除和事件在日历中移动后反映正确的数据。
有人能帮我一下吗?谢谢你的阅读。根据OP的要求,用例子和进一步的解释更新了答案
工作示例
您可以查看我放在一起的JSBin,以演示所请求的功能。代码有补充注释,记录了到底发生了什么——更重要的是,在大多数情况下,为什么。
使用唯一事件id
事件UID的最简单实现可以使用计数器来完成——对于每个新事件,计数器增加,从而为下一个事件提供一个新的UID。
与所有计数器一样,我们定义了它的起始位置…
var uid = 0;
对于fullCalendar
小部件,我们在将外部事件拖放到日历中时为其分配UID。每个fullCalendar eventObject
都有一个id
属性,我们用它来存储这些信息。
在 fullCalendar.drop()
事件范围内完成以下操作:
$('#calendar').fullCalendar('renderEvent', {
title: item,
start: date,
allDay: allDay,
id: uid++
}, true);
为了监视和更新事件项的变化,我们使用一个自定义函数,由eventResize
和eventDrop
(内部掉落/在日历中移动外部事件)事件处理程序调用。
function validateUID(event) {
eventsData.forEach(function (elm, idx) {
if (elm.id == event.id) {
eventsData[idx] = {
name: event.title,
startDate: new Date(event.start).getTime(),
endDate: new Date(event.end).getTime(),
id: event.id
}
}
});
}
同样,您可以在提供的JSBin中看到该方法的实现。
最初反应
处理这个问题的一个好方法是在每次调用fullCalender.drop()
时动态地构建一个数组——我们将其称为eventsData
。在一个简单的实现中,您可以这样做:
// define an array to store all events data
var eventsData = [];
// build the fullCalender widget
$('#calender').fullCalender({
header: { /* generic header information */},
editable: true,
droppable: true,
// the drop() event handler is called ONLY for external
// drop events.
drop: function (date /*, allDay, jsEvent, ui [, this]*/) {
// format `date` into the OPs suggested format.
// note that the external drop does not set an
// end date -- so we re-use the start date for now.
var fixed = new Date(date).getTime();
// add dates to eventsData[]
eventsData.push({
name: $(this).html(),
startDate: fixed,
endDate: fixed
});
}
});
但是,正如您将注意到的,drop
事件处理程序仅在删除外部事件时调用。为了使其成为一个逻辑实现,您需要监视任何删除或调整大小事件,以确保您的eventsData
对象(数组)被一致地更新。
$('#calender').fullCalender({
eventDrop: function (/* event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view */) {
// handle all internal drops (or 'moves').
},
eventResize: function (/* event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, view */) {
// handle all resizing events (i.e. changing an events duration)
}
})
此外,您可能需要考虑为您记录的每个事件添加唯一的ID;这样,您就可以执行逻辑检查,以确保您正在更新对旧事件的更改,而不是添加无效的重复项。
按钮单击
当对象被添加或更改时,这个解决方案动态地构建数组,你可以简单地添加…
$('#save').click(function () {
// do something with eventsData...
});
…到您的脚本,并能够在任何地方访问当前事件数组
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- HTML/CSS-用于拖放的全页面覆盖
- Rubaxa可与聚合物进行排序/拖放不起作用,具体取决于显示器:
- dblclick事件是在jquery拖放后触发的
- 无法进行拖放以使用本地存储
- 如何使用Java脚本创建提交按钮's的拖放功能
- Chrome原生拖放相对容器并不能正确渲染重影
- 如何在Javascript中创建排序、拖放多级列表
- html5拖放文件-在提交整个表单时上传
- 在jQuery UI中获取ul和li值,拖放即可排序
- html5拖放确定拖动项目的来源
- 我使用什么语言来创建像Webly这样的拖放功能
- HTML5拖放;Drop-使用jQuery处理事件
- 使用jquery拖放图像
- HTML5拖放访问属性
- HTML5拖放-如何删除IE上的默认重影图像
- 拖放区.js禁止从服务器检索时的进度条
- 如何在单击按钮时从FullCalendar中检索所有拖放的EventObjects数据
- Dojo拖放:如何检索项目的顺序