如何阻止KendoUI Scheduler导航事件触发自动服务器调用
KendoUI Scheduler 仅阻止导航时的自动服务器请求,保留日期切换
要实现只阻止导航触发的自动服务器调用,同时保留日期切换功能,不要直接在navigate事件中使用e.preventDefault()(它会完全阻断导航行为),可以通过拦截数据源的自动请求来实现:
核心思路
Scheduler导航时会自动触发数据源的read请求,我们只需要拦截这一次自动请求,转而执行自定义逻辑,最后手动触发read。
实现代码
$("#scheduler").kendoScheduler({ views: [{ type: "weekTimeline" }], // 导航事件处理 navigate: function(e) { // 获取切换后的日期范围 const startDate = e.view.startDate(); const endDate = e.view.endDate(); const dataSource = this.dataSource; // 仅拦截本次导航触发的自动请求 dataSource.one("requestStart", function(reqEvent) { // 取消自动发起的服务器请求 reqEvent.preventDefault(); // 执行自定义LoadData函数,完成前置操作 LoadData(startDate, endDate, function() { // 自定义操作完成后,手动触发数据源读取 dataSource.read({ start: startDate.toISOString(), end: endDate.toISOString() }); }); }); }, dataSource: { transport: { read: { url: "/your-api-url", dataType: "json" } } } });
关键说明
- 使用
dataSource.one("requestStart")绑定一次性事件,确保只拦截导航触发的那一次自动请求,不会影响其他手动触发的read操作。 - 不阻断
navigate事件的默认行为,因此Scheduler的日期切换、视图更新会正常执行。 - 在自定义
LoadData完成后,手动调用dataSource.read()并传入正确的日期参数,确保数据源加载对应时间段的数据。
内容的提问来源于stack exchange,提问作者pinale
相关产品推荐
相关产品推荐

