OnEventSave запускается несколько раз в планировщике dhtmlx

Привет, я начал использовать планировщик Dhtmlx, и это действительно здорово. Я проверяю наличие пустого имени события или имени события, уже сохраненного в объекте планировщика. Я бросаю алерт на основе этой проверки, и для первого раза это хорошо. Когда я закрываю планировщик и пытаюсь добавить события с тем же именем, предупреждение отображается несколько раз. При отслеживании проблемы я заметил, что "scheduler.attachEvent("onEventSave")" запускается несколько раз, и поэтому предупреждение отображается несколько раз. Как остановить это многократное вхождение при сохранении одного события.

Мой код:

   scheduler.attachEvent("onEventSave",function(id, ev, is_new){

        var event_name_array = [];
        var events_JSON_Array = JSON.parse(scheduler.toJSON());
        for(var i = 0; i < events_JSON_Array.length; i++)
        {
            var event = events_JSON_Array[i];
            event_name_array.push(scheduler.getEvent(event.id).text);
        }
        if (!ev.text || (event_name_array.indexOf(ev.text) > -1) && (event_name_array.length > 1)) {
            alert('Bad input');
            return false;
        }
        return true;
    })

Заранее спасибо!!!


person user3139250    schedule 07.04.2015    source источник


Ответы (2)


Скорее всего этот обработчик прикреплен несколько раз. Попробуйте добавить проверку, как показано ниже

if(!scheduler._onEventSave){
    scheduler._onEventSave = scheduler.attachEvent("onEventSave",function(id, ev, is_new){

        var event_name_array = [];
        var events_JSON_Array = JSON.parse(scheduler.toJSON());
        for(var i = 0; i < events_JSON_Array.length; i++)
        {
            var event = events_JSON_Array[i];
            event_name_array.push(scheduler.getEvent(event.id).text);
        }
        if (!ev.text || (event_name_array.indexOf(ev.text) > -1) && (event_name_array.length > 1)) {
            alert('Bad input');
            return false;
        }
        return true;
    });
}

Если у вас есть несколько событий, вам может потребоваться выполнить одну и ту же проверку для всех из них. В этом случае было бы проще поместить все attachEvent в какую-то функцию и обеспечить ее вызов только один раз, например.

// define handlers here
scheduler.initAppEvents = function(){

   scheduler.attachEvent("onEventSave",function(id, ev, is_new){
      ....
   });
   ....

   // replace self with an empty function after first call
   scheduler.initAppEvents = function(){};
};

и вызвать инициализацию

scheduler.initAppEvents();
person Alex Klimenkov    schedule 07.04.2015

У вас опечатка в функции - забудьте о ; :

var event_name_array = []
alert('Bad input')
person Legendary    schedule 07.04.2015