Kendo Scheduler 事件在取消编辑后消失
Posted
技术标签:
【中文标题】Kendo Scheduler 事件在取消编辑后消失【英文标题】:Kendo Scheduler events disappear after cancelling edit 【发布时间】:2014-02-15 15:05:23 【问题描述】:我使用 Kendo Web GPL 版本 2013.3.1119 设置了一个 Kendo Scheduler 小部件。
它大部分工作正常,因为事件是从远程 SchedulerDataSource 中提取的,并与其关联的资源一起正确显示在日历上。
问题是......当我双击一个事件时,弹出编辑器显示包含正确的数据,但如果我点击取消或关闭“X”,该事件将从日历中删除。
没有错误,事件就消失了。
任何想法可能导致这种情况?
【问题讨论】:
【参考方案1】:我想我找到了问题所在。 SchedulerDataSource 的配置有点反直觉。
我的数据库将事件 ID 存储为 id
,但调度程序需要 taskId
,因此在架构中该字段的定义如下:
taskId: from: 'id', type: 'number'
但我没有意识到您还必须将模型 id
定义为 taskId
而不是服务器实际返回的内容。
所以完整的 SchedulerDataSource 架构如下所示:
schema:
data: 'data',
total: 'total',
model:
id: 'taskId',
fields:
taskId: from: 'id', type: 'number' ,
title: from: 'title', defaultValue: 'No title', validation: required: true ,
start: type: 'date', from: 'start' ,
end: type: 'date', from: 'end' ,
description: from: 'description' ,
ownerId: from: 'employee_id' ,
isAllDay: type: 'boolean', from: "allDay" ,
type_id: type: 'number'
只是出于兴趣,有人知道您可以在常规 Kendo 数据源中使用 from: 'server-field'
定义字段“别名”吗?可能有用。
【讨论】:
这也解决了我的问题,感谢您发布您的解决方案。 我看不出使用字符串“taskId”有什么不同。我确实在这里找到了更多信息:telerik.com/forums/… 非常感谢您发布此信息。可能为我节省了大量时间。【参考方案2】:我遇到的确切问题。这个“错误”的原因是我建立了一个错误的模型。在我的情况下,所有事件的所有 id 都是相同的。因此,请仔细检查事件 ID 的唯一性。
Razor 语法示例:
@html.Kendo().Scheduler<EventsViewModel>()
.Name("scheduleTimes")
.Timezone("Etc/UTC")
.Views(views => views.WeekView())
.DataSource(d => d
.Model(m =>
m.Id(f => f.TimeId); //!!! TimeID should be unique
m.Field(f => f.Title).DefaultValue(" ");
m.Field(f => f.Start).Editable(true);
m.Field(f => f.End).Editable(true);
)
)
)
【讨论】:
【参考方案3】:我也不得不在 Kendo Scheduler 对象中更新它:
$("#schedulerID").getKendoScheduler().dataSource._pristineData
当我向调度程序添加新任务时,新对象被添加到该数组“_pristineData”的末尾,但它的“id”字段为空。如果我取消编辑...这个新任务会在浏览器中消失。然后我更新 Kendo Scheduler 对象:
var length = $("schedulerID").getKendoScheduler().dataSource._pristineData.length;
$("#schedulerID").getKendoScheduler().dataSource._pristineData[length - 1].id = id;
...为我工作。
【讨论】:
以上是关于Kendo Scheduler 事件在取消编辑后消失的主要内容,如果未能解决你的问题,请参考以下文章
Kendo UI (Scheduler) - 为每个事件添加唯一的 css 类