【问题标题】:DHtmlX Scheduler Events not showing in Safari and Internet ExplorerDHtmlX 调度程序事件未在 Safari 和 Internet Explorer 中显示
【发布时间】:2019-02-13 17:01:43
【问题描述】:

我正在构建一个 nodejs 应用程序并将 DHtmlX 调度程序作为我的日历。日历在 Chrome、Firefox 和 Microsoft Edge 上完美显示事件,但不会在 Safari 或 IE 上显示事件。我对 Web 开发非常陌生,不知道自己做错了什么。

这是我日历的 index.html

        <!doctype html>
        <head>
            <meta http-equiv="Content-type" content="text/html; charset=utf-8">
            <title>Basic initialization</title>
            <link rel="stylesheet" href="https://cdn.dhtmlx.com/scheduler/edge/dhtmlxscheduler.css">
            <script src="https://cdn.dhtmlx.com/scheduler/edge/dhtmlxscheduler.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">&nbsp;</div>
                    <div class="dhx_cal_next_button">&nbsp;</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 地图集中的存储方式

【问题讨论】:

    标签: javascript node.js express cross-browser dhtmlx


    【解决方案1】:

    您使用new Date(dateString) 构造函数解析服务器日期。这不是推荐的方法,因为它容易出现此类问题。

    来自MDN

    注意:由于浏览器的差异和不一致,强烈建议不要使用 Date 构造函数(和 Date.parse,它们是等效的)解析日期字符串。仅按惯例支持 RFC 2822 格式字符串。对 ISO 8601 格式的支持的不同之处在于仅日期字符串(例如“1970-01-01”)被视为 UTC,而不是本地。

    由于您仅在 IE 和 Safari 中出现问题,这表明问题是由不同的浏览器行为引起的。 您可以检查来自服务器 pls refer to this article 的日期格式,并更新您的问题?如果没有看到您使用的日期的实际格式,我无法给您答案。

    一种可能的解决方案是以客户端调度程序可以解析的格式序列化服务器日期。例如,您可以在这里查看它是如何完成的:tutorialgithub repo

    如果您无法控制服务器日期格式,则需要修改解析函数。为了为此提出建议,我需要知道您的日期是什么样的。

    更新

    由于您从后端获取的日期格式匹配 xml_date 配置值, 我相信一旦你删除这一行,所有的人都应该开始工作:

    scheduler.templates.xml_date = function(value){ return new Date(value); };
    

    Scheduler 根据配置值自动生成 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 即可。

    【讨论】:

    • 刚刚添加了一张图片来显示日期是如何保存的
    猜你喜欢
    • 2015-03-30
    • 2019-07-27
    • 2017-11-02
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多