我正在 Rails 和 jQuery 中构建每周拖放日历,我就是这样做的:
我有一个周表,其中包含可放置的 td 行,以及 td 内的可拖动 div,如下所示:
<tr>
<td><h4>12:00pm</h4></td>
<td class="droppable" data-date="2013-06-30" data-time="12:00pm"></td>
<td class="droppable" data-date="2013-07-01" data-time="12:00pm"></td>
<td class="droppable" data-date="2013-07-02" data-time="12:00pm">
<div class="draggable" data-id="78" data-update-url="/update_weekly_calendar/78">
<a href="/event/78/edit">12:00pm Event</a>
</div>
</td>
<td class="droppable" data-date="2013-07-03" data-time="12:00pm"></td>
<td class="droppable" data-date="2013-07-04" data-time="12:00pm"></td>
<td class="droppable" data-date="2013-07-05" data-time="12:00pm"></td>
<td class="droppable" data-date="2013-07-06" data-time="12:00pm"></td>
</tr>
我在底部有一个脚本标签:
<script>
$('.droppable').droppable({
accept: ".draggable",
drop: function(event,ui) {
$.post( ui.draggable.data('update-url'), {date: $(this).data('date'), time: $(this).data('time')} );
$(this).effect("highlight", {}, 1500);
}
})
$('.draggable').draggable()
</script>
当可拖动的 div 被放下时,它会触发一个如下所示的 POST:
Started POST "/update_weekly_calendar/78" for 127.0.0.1 at 2013-07-02 13:42:27 -0700
Processing by CalendarsController#update_weekly as */*
Parameters: {"date"=>"2013-07-03", "time"=>"9:30am", "id"=>"78"}
从那里开始我的工作,查找事件 #78,并更新日期和开始和停止时间。
提示:事件“find”后,记得先计算事件的持续时间,以便计算和更新事件的“停止时间”。
我还使用上述代码的更简单版本(没有“时间”参数,只有日期)进行拖放月历,所以我将省略它。希望这能回答您的问题。