我一直试图解决这个问题好几个小时,却一无所获。
好的,所以我有一个使用开始和结束日期保存员工假期的数据库表,所以它是一个范围。如果是一天,它将是同一日期,但通常是一个范围。
我在我的网站上使用 Flatpickr 来预订特定日期和时间的工作,但我需要禁用所选工作人员不可用的日期。当用户选择一名员工时,会对数据库中的假期表进行 ajax 调用,并获取任何假期日期,将它们放入一个数组中,然后以 JSON 形式将其返回给 ajax。这是我的电话($(this).val()
指的是人员下拉菜单,这将在更改时运行):
var staffId = $(this).val();
var dateObj = {};
var parsed;
$.post( '/get-availability', { staff_id: staffId }
).done( function(response) {
if(response.length > 0) {
parsed = JSON.parse(response);
$.each(parsed, function(i, element) {
console.log("i : " + i);
dateObj = { from : element['from'], to : element['to'] };
});
}
get-availability 中的 PHP 如下:
$staff_id = $request->get('staff_id');
$staff_entity = $this->getDoctrine()->getManager()->getRepository('AppBundle:Staff')->findOneBy(array('id' => $staff_id));
// get all holidays for the staff member
$holiday_repo = $this->getDoctrine()->getManager()->getRepository('AppBundle:Holiday');
$holidays = $holiday_repo->findBy(array('staff' => $staff_entity));
$result = array();
if(!empty($holidays)) {
$x = 0;
foreach ($holidays as $row) {
$result[$x]['from'] = $row->getStartDate()->format('Y-m-d');
$result[$x]['to'] = $row->getEndDate()->format('Y-m-d');
$x ++;
}
}
return new Response(json_encode($result));
回到 ajax,我需要按如下方式布局我的 flatpickr 配置(日期只是示例):
disable: [
{
from: "2017-04-01",
to: "2017-06-01"
},
{
from: "2017-09-01",
to: "2017-12-01"
}
]
但是我的 dateObj 每次都会被覆盖,所以它只会添加 LAST 日期范围:
var config = {
disable: [
dateObj
]
};
基本上,我需要知道如何正确调整 $.each 循环以获得与上面第一个示例类似的结果,但没有任何效果。到目前为止,我已经尝试过:
dateObj += { from : element['from'], to : element['to'] };
dateObj.i = { from : element['from'], to : element['to'] };
然后将其设为数组并尝试:
dateObj[i] = { from : element['from'], to : element['to'] };
JSON.stringify(dateObj)
但是每一个都失败了。我希望有人可以帮助我解决这个问题!