我使用Kendo Web GPL版本2013.3.1119设置了一个Kendo Scheduler小部件。
它工作正常,因为事件是从远程SchedulerDataSource中提取的,并且在日历上正确显示其相关资源。
问题是......当我双击某个事件时,弹出的编辑器会显示包含正确的数据,但如果我单击取消或关闭'X',该事件将从日历中删除。
没有错误,事件就消失了。
可能导致此问题的任何想法?
答案 0 :(得分:12)
我想我发现了问题。 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'
定义字段'别名'?可能有用。
答案 1 :(得分:1)
我遇到的问题。这个' bug的原因是'是我设置了一个错误的模型。就我而言,所有事件的所有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);
}
)
)
)
答案 2 :(得分:0)
我也必须在Kendo Scheduler对象中更新它:
$("#schedulerID").getKendoScheduler().dataSource._pristineData
当我向调度程序添加新任务时,新对象将添加到该数组“_pristineData”的末尾,但它的“id”字段为空。如果我取消编辑...这个新的taks在浏览器中消失。然后我更新了Kendo Scheduler对象:
var length = $("schedulerID").getKendoScheduler().dataSource._pristineData.length;
$("#schedulerID").getKendoScheduler().dataSource._pristineData[length - 1].id = id;
......对我有用。