События планировщика DHtmlX не отображаются в Safari и Internet Explorer - PullRequest
0 голосов
/ 09 февраля 2019

Я создаю приложение nodejs и внедряю DHtmlX Scheduler в качестве моего календаря.Календарь отлично отображает события в Chrome, Firefox и Microsoft Edge, но не отображает события в Safari или IE.Я очень плохо знаком с веб-разработкой и понятия не имею, что я делаю неправильно.

вот индекс моего календаря. 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>

РЕДАКТИРОВАТЬ: Here is how the dates are stored in my MongoDB atlas Вот как хранятся даты в моем атласе MongoDB

1 Ответ

0 голосов
/ 11 февраля 2019

Вы анализируете даты сервера с помощью конструктора new Date(dateString).Это не рекомендуемый подход, поскольку он подвержен подобным проблемам.

С MDN

Примечание: синтаксический анализ строк даты с помощью конструктора Date (иDate.parse, они эквивалентны) настоятельно не рекомендуется из-за различий и несоответствий браузера.Поддержка строк формата RFC 2822 предоставляется только по соглашению.Поддержка форматов ISO 8601 отличается тем, что строки только с датой (например, «1970-01-01») обрабатываются как UTC, а не как локальные.

Поскольку у вас есть проблемы только в IE и Safari, онпредполагает, что проблема вызвана различным поведением браузера.Вы можете проверить формат дат, которые приходят с сервера, Пожалуйста, обратитесь к этой статье и обновить свой вопрос?Я не могу дать вам ответ, не увидев фактический формат дат, с которыми вы работаете.

Одним из возможных решений будет сериализация серверных дат в формате, который может анализировать планировщик на стороне клиента.Например, вы можете проверить, как это делается здесь: учебник , github repo

Если у вас нет контроля над форматами даты сервера, то вам понадобитсяизменить функцию разбора.Чтобы предложить что-то для этого, мне нужно знать, как выглядят ваши даты.

ОБНОВЛЕНИЕ

Поскольку формат дат, который вы получаете из бэкэнда, соответствует 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 config (например, даты или метки времени ISO)

Кроме того, обязательно добавьте свойство id (без подчеркивания) к данным вашего сервера.Планировщик на стороне клиента не распознает поле _id , и в результате вы не сможете изменять существующие записи на стороне клиента.

Только настройки event.id = event._id перед возвратом данных вклиент должен сделать трюк.

...