Webix Scheduler UNIT视图无法加载显示事件问题排查
问题分析与修复方案
以下是导致Webix Scheduler UNIT视图无法显示事件的核心问题及对应修复:
1. 未处理嵌套的事件数据结构
API返回的事件数组嵌套在response.events中,但Scheduler默认无法直接识别这种嵌套结构,需要通过数据提取规则获取事件列表。
2. 日期格式解析错误
事件中的日期字符串包含AM/PM标识(如2023/09/28 09:45:00 AM),但当前解析格式%Y/%m/%d %H:%i未适配12小时制的时段标识,导致日期转换失败。
3. 仅在月视图加载事件
当前代码仅在切换到月视图时才加载数据,UNIT视图无法触发数据加载逻辑。
4. 缺少UNIT视图必需的单元配置
UNIT视图需要预先定义分组单元(如诊室、人员),且每个事件需关联对应单元ID,否则无法在视图中渲染。
修复后的完整代码
var data = { "response": "success", "events": [ { "id": 46, "url": "", "title": "Jeremy Madison", "start": "2023/09/28 09:45:00 AM", "end": "2023/09/28 09:45:00 AM", "unit": 1, // 关联到下面定义的单元ID "extendedProps": { "calendar": "business", "model": { "id": 46, "appointment_type": "medical", "user_id": 1, "service_id": 1, "patient_id": 20, "location_id": 1, "start": "2023-09-28 09:30:00", "end": "2023-09-28 09:45:00", "time": "9:30 AM", "duration": "15", "allDay": 0, "status": 0, "location": "peshawar", "mobile_no": "+1 (907) 769-9091\n", "clinician_name": "Sudais Khan", "patient_name": "Jeremy Madison" } } } ] } webix.ready(function () { webix.CustomScroll.init(); var id = 1; var apiUrl = "schedules?nid=" + id; var scheduler = webix.ui({ view: "scheduler", container: "my_schedules", id: "myScheduler", width: 1000, height: 1000, save: "rest->"+ apiUrl, // 配置UNIT视图所需的单元 units: [ { id: 1, value: "诊室1" }, { id: 2, value: "诊室2" } ], // 默认视图设置为UNIT(可选) defaultView: "unit", monthSelect: true, weekHeader: true, // 数据处理规则 scheme: { // 提取嵌套的事件数组 $init: function(obj){ // 适配带AM/PM的日期格式 obj.start_date = webix.Date.isDate(obj.start) ? obj.start : webix.Date.strToDate("%Y/%m/%d %h:%i:%s %A")(obj.start); obj.end_date = webix.Date.isDate(obj.end) ? obj.end : webix.Date.strToDate("%Y/%m/%d %h:%i:%s %A")(obj.end); }, $parse: function(data){ // 从响应中提取事件列表 return data.events || data; } }, on: { onBeforeEventSave: function (id, data, update) { // 保存时转换回原日期格式 data.start = webix.Date.dateToStr("%Y/%m/%d %h:%i:%s %A")(data.start_date); data.end = webix.Date.dateToStr("%Y/%m/%d %h:%i:%s %A")(data.end_date); }, }, }); // 初始化时直接加载数据,无需等待视图切换 scheduler.load(apiUrl, "json"); });
内容的提问来源于stack exchange,提问作者Eniol
相关产品推荐
相关产品推荐

