翻譯|使用教程|編輯:龔雪|2023-09-04 10:29:16.450|閱讀 85 次
概述:在本文中我們將逐步介紹如何把DHTMLX Suite小部件嵌入到Scheduler組件的Lightbox,讓項目管理及各項任務調度更可控!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在構建JavaScript調度器時,通常需要為最終用戶提供一個他們喜歡的方式來計劃事件,這是Web開發人員喜歡認可DHTMLX Scheduler的重要原因,它在這方面提供了完全的操作自由,它帶有lightbox彈出窗口,允許通過各種控件動態更改事件的細節。
但是如果想用DHTMLX Suite庫中的小部件來補充Scheduler的lightbox,該怎么辦呢?在本文中,我們將逐步指導您如何將DHTMLX Suite小部件嵌入到Scheduler組件的lightbox中。
DHTMLX Suite庫中的任何小部件都可以無縫地集成到Scheduler組件的編輯表單中,對于所有小部件,算法幾乎是相同的。因此我們以DHTMLX Calendar為例,說明如何在實踐中做到這一點。我們將把這個功能與啟用的時間選擇器放在調度器的lightbox中,它有助于方便地以12或24小時格式指定事件的日期和持續時間。
下面是預期的結果:
首先,有必要在scheduler.form_blocks中創建一個新的編輯器對象。為此必須使用返回HTML元素的render方法,在此方法中,您只需創建容器,并在其中生成日期選擇器。
scheduler.form_blocks["custom_date_editor"]={ render:function(config){ // config- section configuration object return `<div class='custom_date_editor-wrapper'> <div name="start_date"></div> <div name="end_date"></div> </div> `; }, set_value:function(node,value,ev,config){ }, get_value:function(node,ev,config){ }, focus:function(node){ } };
之后必須創建公共變量startDateCalendar和startDateCalendar:
let startDateCalendar; let endDateCalendar;
這些變量用于訪問將放置時間選擇器的日歷對象。
下一步是創建initcalendar()函數,當您需要重新初始化日歷時,即每次打開lightbox時調用它,該函數還在創建新日歷之前使用析構函數方法刪除任何舊日歷(如果它們存在)。timePicker屬性的值應設置為true,以補充日期選擇功能,使其能夠選擇計劃事件的時間。在下面的代碼示例中,我們還使用了dhx_widget - borderdered CSS類來幫助指定日歷的邊框。
function initCalendars(startDateElement, endDateElement){ if(startDateCalendar){ destroyCalendars(); } startDateCalendar = new dhx.Calendar(startDateElement, { timePicker: true, css: "dhx_widget--bordered" }); endDateCalendar = new dhx.Calendar(endDateElement, { timePicker: true, css: "dhx_widget--bordered" }); } function destroyCalendars(){ if(startDateCalendar){ startDateCalendar.destructor(); endDateCalendar.destructor(); startDateCalendar = null; endDateCalendar = null; } }
現在是時候考慮lightbox控件對象中的set_value函數了,每當控件接收到新值時,就調用此方法。當lightbox打開時,當控件通過API接收到一個新值時,就會發生這種情況。
這就是您必須初始化日歷并填充其值的地方:
set_value:function(node,value,ev,config){ initCalendars(node.querySelector("[name='start_date']"), node.querySelector("[name='end_date']")); startDateCalendar.setValue(new Date(ev.start_date)); endDateCalendar.setValue(new Date(ev.end_date)); },
為了使控件能夠在事件中保存這些值,必須從get_value函數返回這些值。
在我們的例子中,函數看起來像這樣:
get_value:function(node,ev,config){ const start_date = startDateCalendar.getValue(true); const end_date = endDateCalendar.getValue(true); ev.start_date = start_date; ev.end_date = end_date; return { start_date, end_date }; },
澄清在這里做的兩件事情是很重要的:
當實現映射到事件對象單個屬性的簡單控件時,不需要修改事件對象,只需要從方法返回值,返回值將自動分配給事件對象的相應屬性。
最后需要在日歷不再需要時銷毀它們,通常使用DHTMLX Scheduler的onAfterLightbox事件來完成:
scheduler.attachEvent("onAfterLightbox", destroyCalendars);
在這個示例中,您可以看到帶有嵌入式時間選擇器功能的事件日歷,并使用它。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網