1

こんにちは、私は 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;
    })

前もって感謝します!!!

4

2 に答える 2

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();
于 2015-04-07T13:50:45.303 に答える