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 Scheduler 防止编辑/破坏某些事件

Kendo UI Scheduler:自定义视图和编辑行为

Kendo Scheduler DatePicker 事件

Kendo UI (Scheduler) - 为每个事件添加唯一的 css 类

Kendo UI Grid:如果有任何未决更改,则无法拦截和取消排序事件

Kendo UI Scheduler:如何创建自定义模板