【问题标题】:Kendo Scheduler events disappear after cancelling editKendo Scheduler 事件在取消编辑后消失
【发布时间】:2014-02-15 15:05:23
【问题描述】:

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

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

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

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

任何想法可能导致这种情况?

【问题讨论】:

    标签: kendo-ui kendo-scheduler


    【解决方案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;
      

      ...为我工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-18
        • 1970-01-01
        • 2018-06-02
        • 2015-07-15
        • 1970-01-01
        • 2014-07-16
        相关资源
        最近更新 更多