要获取事件对象,请使用 getEvent 方法:
scheduler.parse([
{id:1, start_date:"2019-05-13 6:00", end_date:"2019-05-13 8:00", text:"Event 1"},
{id:2, start_date:"2019-06-09 6:00", end_date:"2019-06-09 8:00", text:"Event 2"}
]);
...
var eventObj = scheduler.getEvent(1);
//->{id:1, start_date:"2019-05-13 6:00", end_date:"2019-05-13 8:00", text:"Event 1"}
要获取在某一时间段内发生的事件列表,请使用 getEvents 方法:
var evs = scheduler.getEvents(new Date(2019,1,10),new Date(2019,2,10));
//其中 evs 是事件对象的数组
要获取当前加载到调度器中的所有事件,可以如下调用 getEvents 方法,不传递任何参数:
var evs = scheduler.getEvents();
// 返回所有事件,形式为对象数组
var evs = scheduler.getEvents(new Date(), new Date(9999,1,1));
//evs - 所有即将到来的事件列表
evs.sort(function(a,b){ return (a.start_date > b.start_date ? 1 : -1); });
//evs[0] - 最近的即将到来的事件
要根据事件的某个属性值查找该事件的 id,可以使用如下方法:
Getting the event's id by the event's text
scheduler.parse([
{id:1, start_date:"2019-05-13 6:00", end_date:"2019-05-13 8:00", text:"Event 1"},
{id:2, start_date:"2019-06-09 6:00", end_date:"2019-06-09 8:00", text:"Event 2"}
]);
...
var evs = scheduler.getEvents(); //获取调度器中的所有事件
for(var i=0;i<evs.length; i++){ //遍历所有事件以查找目标事件
if (evs[i].text == "Event 2")
var eventId = evs[i].id;// -> 2
};
如果已知事件的大致时间,建议在获取事件时限定时间范围,以提升性能:
var evs = scheduler.getEvents(new Date(2019,05,01),new Date(2019,05,10));
for(var i=0;i<evs.length; i++){
if (evs[i].text == "Event 2")
var eventId = evs[i].id;// -> 2
};
要更新事件的 id,可以使用 changeEventId 方法,示例如下:
scheduler.changeEventId("ev15", "ev25"); //将事件 id 从 "ev15" 更改为 "ev25"
默认情况下,Scheduler 事件的文本是从 lightbox 中映射的 text 字段设置的。
你也可以覆盖此默认行为,使用下拉选项中所选项的 label 作为事件文本。
事件文本由以下模板之一决定:event_text 或 event_bar_text,具体取决于视图类型。要自定义事件文本的生成方式,你应重定义相应的模板。
scheduler.config.lightbox.sections = [
{ name:"type", height:21, inputWidth:400, map_to:"type", type:"select",
options:scheduler.serverList("options", [
{key:1, label:"Simple"},
{key:2, label:"Complex"},
{key:3, label:"Unknown"}
]
)},
{name:"time", height:72, type:"time", map_to:"auto"}
];
scheduler.templates.event_text = scheduler.templates.event_bar_text = function(start, end, event){
var options = scheduler.serverList("options");
for(var i = 0; i < options.length; i++){
if(options[i].key == event.type){
return options[i].label;
}
}
return "";
};
关于上述代码,有几点需要注意:
serverList 方法为下拉框提供选项,并在模板中获取。它也可用于通过 connector 与其他数据一起加载选项,并支持动态更新选项。
模板通过线性查找方式查找被选中的项。如果事件或选项数量较大,由于模板可能会被频繁调用,这种方式可能影响性能。为提升效率,建议使用哈希表进行更快的查找,而不是每次遍历数组。
客户端需要有完整的选项列表才能正确显示。如果没有,必须手动加载选项,例如在使用自动补全搜索并动态获取选项时。