DHtmlX调度程序事件未在Safari和Internet Explorer中显示
我正在构建一个nodejs应用程序,并正在实现DHtmlX Scheduler作为我的日历。日历在Chrome,Firefox和Microsoft Edge上完美显示事件,但不会在Safari或IE上显示事件。我对网络开发很陌生,不知道我做错了什么。
这是我的日历的index.html
<!doctype html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Basic initialization</title>
<link rel="stylesheet" href=".css">
<script src=".js"></script>
<style>
html, body{
margin:0px;
padding:0px;
height:100%;
overflow:auto;
}
</style>
<script>
function init() {
scheduler.config.xml_date="%Y-%m-%d %H:%i";
scheduler.init('scheduler_here',new Date(),"month");
scheduler.templates.xml_date = function(value){ return new Date(value); };
scheduler.load("/data", "json");
var dp = new dataProcessor("/data");
dp.init(scheduler);
dp.setTransactionMode("POST", false);
}
</script>
</head>
<body onload="init();">
<div id="scheduler_here" class="dhx_cal_container" style='width:100%; height:100%;'>
<div class="dhx_cal_navline">
<div class="dhx_cal_prev_button"> </div>
<div class="dhx_cal_next_button"> </div>
<div class="dhx_cal_today_button"></div>
<div class="dhx_cal_date"></div>
<div class="dhx_cal_tab" name="day_tab"></div>
<div class="dhx_cal_tab" name="week_tab"></div>
<div class="dhx_cal_tab" name="month_tab" ></div>
</div>
<div class="dhx_cal_header">
</div>
<div class="dhx_cal_data">
</div>
</div>
</body>
编辑:以下是我的MongoDB地图集中存储日期的方式
回答如下:您使用new Date(dateString)
构造函数解析服务器日期。这不是推荐的方法,因为它容易出现这种问题。
来自MDN
注意:由于浏览器差异和不一致,强烈建议不要使用Date构造函数(和Date.parse,它们是等效的)解析日期字符串。对RFC 2822格式字符串的支持仅限于惯例。对ISO 8601格式的支持不同之处在于仅日期字符串(例如“1970-01-01”)被视为UTC,而不是本地字符串。
由于您仅在IE和Safari中遇到问题,因此表明问题是由不同的浏览器行为引起的。您可以检查来自服务器,pls refer to this article的日期格式,并更新您的问题?如果没有看到您使用日期的实际格式,我无法给您答案。
一种可能的解决方案是以客户端调度程序可以解析的格式序列化服务器日期。例如,你可以在这里查看它是如何完成的:tutorial,github repo
如果您无法控制服务器日期格式,则需要修改解析函数。为了给出一些建议,我需要知道你的日期是什么样的。
UPDATE
由于您从后端获得的日期格式与xml_date配置值匹配,我相信一旦删除此行,所有应该开始工作:
scheduler.templates.xml_date = function(value){ return new Date(value); };
调度程序从配置值自动生成xml_date函数,它不需要额外的配置。如果要显式定义模板,可以执行以下操作:
scheduler.templates.xml_date = scheduler.date.str_to_date("%Y-%m-%d %H:%i");
总的来说,如果服务器格式动态更改,或者服务器返回xml_date配置无法表达的格式(例如ISO日期或时间戳),则只需定义此模板
另外,请务必将id(不带下划线)属性添加到服务器数据中。客户端调度程序将无法识别_id字段,因此您将无法从客户端修改现有记录。
只需在将数据返回给客户端之前设置event.id = event._id
即可。