8

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

它大部分工作正常,因为事件是从远程 SchedulerDataSource 中提取的,并与其关联的资源一起正确显示在日历上。

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

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

有什么想法可能导致这种情况吗?

4

3 回答 3

14

我想我找到了问题所在。SchedulerDataSource 的配置有点违反直觉。

我的数据库将事件的 ID 存储为id但调度程序需要taskId,因此在架构中该字段的定义如下:

taskId: { from: 'id', type: 'number' }

但我没有意识到您还必须将模型定义idtaskId而不是服务器实际返回的模型。

所以完整的 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 数据源中定义字段“别名”吗?可能有用。

于 2014-01-24T15:34:27.857 回答
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);
      }
    )
  )
)
于 2015-11-19T02:22:23.793 回答
0

我也不得不在 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;

...并为我工作。

于 2015-02-16T12:42:54.327 回答