我使用 Kendo Web GPL 版本 2013.3.1119 设置了一个 Kendo Scheduler 小部件。
它大部分工作正常,因为事件是从远程 SchedulerDataSource 中提取的,并与其关联的资源一起正确显示在日历上。
问题是......当我双击一个事件时,弹出编辑器显示包含正确的数据,但如果我单击取消或关闭“X”,该事件将从日历中删除。
没有错误,事件就消失了。
有什么想法可能导致这种情况吗?
我使用 Kendo Web GPL 版本 2013.3.1119 设置了一个 Kendo Scheduler 小部件。
它大部分工作正常,因为事件是从远程 SchedulerDataSource 中提取的,并与其关联的资源一起正确显示在日历上。
问题是......当我双击一个事件时,弹出编辑器显示包含正确的数据,但如果我单击取消或关闭“X”,该事件将从日历中删除。
没有错误,事件就消失了。
有什么想法可能导致这种情况吗?
我想我找到了问题所在。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' }
}
}
}
只是出于兴趣,有人知道您可以from: 'server-field'
在常规 Kendo 数据源中定义字段“别名”吗?可能有用。
我遇到的确切问题。这个“错误”的原因是我建立了一个错误的模型。在我的情况下,所有事件的所有 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);
}
)
)
)
我也不得不在 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;
...并为我工作。