我正在尝试通过flatpickr构建一个日历,该日历显示月视图中的占用情况。这个日期选择器中的小点:
flatpickr 的文档说明了一种与日单元交互的相当简单的方法,并在创建日单元时添加一些元素或操作单元:
...
onDayCreate: function(dObj, dStr, fp, dayElem){
// Utilize dayElem.dateObj, which is the corresponding Date
// dummy logic
if (Math.random() < 0.15)
dayElem.innerHTML += "<span class='event'></span>";
else if (Math.random() > 0.85)
dayElem.innerHTML += "<span class='event busy'></span>";
}
...
非常酷:每次创建单元格时都会调用此回调,因此每次视图 30|31 次。
占用率通过一个 API 公开,该 API 采用单个或一组日期,并返回一个包含占用信息的数组:
{
'2018-04-19': 60,
'2018-04-30': 21,
....
}
在onDayCreate
-event 中,我可以调用 API 并根据返回的结果采取行动。虽然这会创建 30/31 请求,但它是可行的,但效率不高。
到现在为止还挺好; 但问题在于,如果您滚动浏览月份,每个月都会向 API 生成 30/31 的请求。即使月份只显示了几分之一秒。本质上我是在 DDOSsing 我自己的服务器。
我的下一个方法是在 1 个请求中预加载“第一”月,并使用onDayCreate
-event 从预加载的数组中挑选。
随后几个月的占用情况将在onMonthChange
-event 中异步加载。但是,flatpickr 似乎触发了onMonthChange
-event 并继续进行白天创建:
所以我不能在onMonthChange中使用新加载的数据...
关于如何将占用信息动态加载到 flatpickr 而不用(不必要的)请求重载 API 的任何帮助