如何将假期添加到 kendo 调度程序?

How to add holidays to kendo scheduler?

有人知道如何将假期添加到 kendo 调度程序吗?

我的意思是在节假日用户不应该添加任何事件。

您可以使用 all day event template 创建假期。

可以通过 messages.allDay 设置消息,如下所示:

<div id="scheduler"></div>
<script>
$("#scheduler").kendoScheduler({
  date: new Date("2013/6/6"),
  messages: {
    allDay: "Holiday"
  },
  dataSource: [
    {
      id: 1,
      start: new Date("2013/6/6 08:00 AM"),
      end: new Date("2013/6/6 09:00 AM"),
      title: "Interview"
    }
  ]
});
</script>

您可以查看 this executable example 假期详情。

编辑

BorHunter: but in your example I can add new events into scheduler, but I don't need it. I mean user shoudn't be able to add event on that particular holiday/date.

然后您只需使用 editable like this example 禁用该选项即可:

editable: false,

this one:

editable: {
  create: false,
  update: false,
  resize: false,
  move: false,
  destroy: false
},

我建议在我创建的示例中添加自定义 class class k-holiday 或者可能利用 kendo class k-non-workhour 并在 dataBound 函数上添加:

dataBound: function () {
    var scheduler = this;
    //get scheduler view
    var schedulerView = this.view();
    //loop through all slot/event/tile
    schedulerView.table.find("td[role=gridcell]").each(function () {

        //find start date
        var slot = scheduler.slotByElement($(this));

        var CONSTANT_HOLIDAY_DATE = new Date("2013/6/11");
        CONSTANT_HOLIDAY_DATE.setHours(0, 0, 0, 0);
        slot.startDate.setHours(0, 0, 0, 0);

        //compare date curent event with holiday
        if (slot.startDate.getTime() == CONSTANT_HOLIDAY_DATE.getTime()) {
            $(this).addClass("k-holiday");
        } else {
            $(this).removeClass("k-holiday");

        }
    });
},

我在这个特定的日期 new Date("2013/6/11") 创建了一个假期,稍后在这个日期的所有 event/slot 都会有 k-holiday class , 然后你想把这个添加到你的编辑功能中:

edit: function (e) {
    var uid = e.container.attr('data-uid');
          var element = e.sender.element.find('div.k-event[data-uid="' + uid + '"]');
    var slot =$("#scheduler").data("kendoScheduler").slotByElement(element);
    if($(slot.element).hasClass("k-holiday")){
        e.preventDefault();
    }
}

以上条件将过滤双击/编辑的事件,它会阻止有 k-holiday 的事件打开弹出窗口。请参考这个kendo dojo

注意:在该示例中,您会注意到在 2011 年 6 月 星期二 您无法触发 edit/add 新事件,但在除此之外的那一天你仍然可以