取消编辑后,Kendo Scheduler事件消失

时间:2014-01-24 14:57:41

标签: kendo-ui kendo-scheduler

我使用Kendo Web GPL版本2013.3.1119设置了一个Kendo Scheduler小部件。

它工作正常,因为事件是从远程SchedulerDataSource中提取的,并且在日历上正确显示其相关资源。

问题是......当我双击某个事件时,弹出的编辑器会显示包含正确的数据,但如果我单击取消或关闭'X',该事件将从日历中删除。

没有错误,事件就消失了。

可能导致此问题的任何想法?

3 个答案:

答案 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;

......对我有用。