Introduction:

In my previous article, I discussed about Remote binding in Kendo Scheduler. In this article let us start playing with Kendo Scheduler Event.

I will use the following REST service to explain how to perform event handling in the Kendo Scheduler.

REST service end point: Api/Events created in my previous article.

The Api/Events service response in POSTMAN as in the following figure:

Views in Kendo Scheduler

The kendo Scheduler have different views like Day view, week view, month view, agenda view and timeline view which can be implement using data-view property as in the following code:

  1. <div data-role="scheduler"
  2. data-views="['day','week','month','agenda','timeline']"
  3. data-bind="source: tasks,
  4. visible: isVisible,
  5. style="height: 600px" data-selectable="true">
  6. </div>
Result in Browser:
Events In Kendo Scheduler

DataBinding:

This event is fired when the widget binds to its data source

  1. <div id="example">
  2. <div data-role="scheduler"
  3. data-bind="source: tasks,
  4. visible: isVisible,
  5. events:{ dataBinding: scheduler_dataBinding }"
  6. style="height: 600px" data-selectable="true">
  7. </div>
  8. </div>
JavaScript:
  1. var viewModel = kendo.observable(
  2. {
  3. isVisible: true,
  4. scheduler_dataBound: function(e)
  5. {
  6. e.preventDefault();
  7. alert("dataBound");
  8. },
  9. tasks: new kendo.data.SchedulerDataSource(
  10. {
  11. batch: true,
  12. transport:
  13. {
  14. read:
  15. {
  16. url: "api/Events",
  17. dataType: "json"
  18. },
  19. parameterMap: function(options, operation)
  20. {
  21. if (operation !== "read" && options.models)
  22. {
  23. return
  24. {
  25. models: kendo.stringify(options.models)
  26. };
  27. }
  28. },
  29. },
  30. schema:
  31. {
  32. model:
  33. {
  34. id: "taskId",
  35. fields:
  36. {
  37. taskId:
  38. {
  39. from: "TaskID",
  40. type: "number"
  41. },
  42. title:
  43. {
  44. from: "Title",
  45. defaultValue: "No title",
  46. validation:
  47. {
  48. required: true
  49. }
  50. },
  51. start:
  52. {
  53. type: "date",
  54. from: "Start"
  55. },
  56. end:
  57. {
  58. type: "date",
  59. from: "EndDate"
  60. },
  61. startTimezone:
  62. {
  63. from: "StartTimezone"
  64. },
  65. endTimezone:
  66. {
  67. from: "EndTimezone"
  68. },
  69. description:
  70. {
  71. from: "Description"
  72. },
  73. recurrenceId:
  74. {
  75. from: "RecurrenceID"
  76. },
  77. recurrenceRule:
  78. {
  79. from: "RecurrenceRule"
  80. },
  81. recurrenceException:
  82. {
  83. from: "RecurrenceException"
  84. },
  85. isAllDay:
  86. {
  87. type: "boolean",
  88. from: "IsAllDay"
  89. }
  90. }
  91. }
  92. }
  93. })
  94. });
  95. kendo.bind($("#example"), viewModel);
Result in Browser:

DataBound:

This event is fired when the kendo scheduler is bound to data from its dataSource

  1. <div id="example">
  2. <div data-role="scheduler"
  3. data-bind="source: tasks,
  4. visible: isVisible,
  5. events:{ dataBound: scheduler_dataBound}"
  6. style="height: 600px" data-selectable="true">
  7. </div>
  8. </div>
JavaScript:
  1. var viewModel = kendo.observable({
  2. isVisible: true,
  3. scheduler_dataBound:function(e)
  4. {
  5. e.preventDefault();
  6. alert("dataBound");
  7. },
  8. tasks: new kendo.data.SchedulerDataSource({
  9. batch: true,
  10. transport:
  11. {
  12. read:
  13. {
  14. url: "api/Events",
  15. dataType: "json"
  16. },
  17. parameterMap: function (options, operation)
  18. {
  19. if (operation !== "read" && options.models) {
  20. return
  21. {
  22. models: kendo.stringify(options.models)
  23. };
  24. }
  25. },
  26. },
  27. schema: {
  28. model: {
  29. id: "taskId",
  30. fields: {
  31. taskId: { from: "TaskID", type: "number" },
  32. title: { from: "Title", defaultValue: "No title", validation: { required: true } },
  33. start: { type: "date", from: "Start" },
  34. end: { type: "date", from: "EndDate" },
  35. startTimezone: { from: "StartTimezone" },
  36. endTimezone: { from: "EndTimezone" },
  37. description: { from: "Description" },
  38. recurrenceId: { from: "RecurrenceID" },
  39. recurrenceRule: { from: "RecurrenceRule" },
  40. recurrenceException: { from: "RecurrenceException" },
  41. isAllDay: { type: "boolean", from: "IsAllDay" }
  42. }
  43. }
  44. }
  45. })
  46. });
  47. kendo.bind($("#example"), viewModel);
Result in Browser

Resize Event:

This Event in kendo Scheduler is fired when the user is resizing an event.

HTML Design:

  1. <div id="example">
  2. <div data-role="scheduler"
  3. data-bind="source: tasks,
  4. visible: isVisible,
  5. events:{ resize: scheduler_resize}"
  6. style="height: 600px" data-selectable="true">
  7. </div>
  8. </div>
JavaScript:
  1. var viewModel = kendo.observable({
  2. isVisible: true,
  3. scheduler_resize:function(e)
  4. {
  5. e.preventDefault();
  6. alert("Resize events")
  7. },
  8. tasks: new kendo.data.SchedulerDataSource({
  9. batch: true,
  10. transport: {
  11. read: {
  12. url: "api/Events",
  13. dataType: "json"
  14. },
  15. parameterMap: function (options, operation) {
  16. if (operation !== "read" && options.models) {
  17. return {
  18. models: kendo.stringify(options.models)
  19. };
  20. }
  21. },
  22. },
  23. schema: {
  24. model: {
  25. id: "taskId",
  26. fields: {
  27. taskId: { from: "TaskID", type: "number" },
  28. title: { from: "Title", defaultValue: "No title", validation: { required: true } },
  29. start: { type: "date", from: "Start" },
  30. end: { type: "date", from: "EndDate" },
  31. startTimezone: { from: "StartTimezone" },
  32. endTimezone: { from: "EndTimezone" },
  33. description: { from: "Description" },
  34. recurrenceId: { from: "RecurrenceID" },
  35. recurrenceRule: { from: "RecurrenceRule" },
  36. recurrenceException: { from: "RecurrenceException" },
  37. isAllDay: { type: "boolean", from: "IsAllDay" }
  38. }
  39. }
  40. }
  41. })
  42. });
  43. kendo.bind($("#example"), viewModel);
Result in Browser:

Change Event:

This event in Kendo scheduler is fired when the user selects a cell or event in the scheduler

Note: The data-selectable property should be true to enable this event.

HTML Design:
  1. <div id="example">
  2. <div data-role="scheduler"
  3. data-bind="source: tasks,
  4. visible: isVisible,
  5. events:{ change: scheduler_change,}"
  6. style="height: 600px" data-selectable="true">
  7. </div>
  8. </div>
JavaScript:
  1. var viewModel = kendo.observable({
  2. isVisible: true,
  3. scheduler_change:function(e)
  4. {
  5. var start = e.start;
  6. var end = e.end;
  7. var slots = e.slots;
  8. var events = e.events;
  9. var message = "change:: selection from {0:g} till {1:g}";
  10. if (events.length) {
  11. message += ". The selected event is '" + events[events.length - 1].title + "'";
  12. }
  13. alert(kendo.format(message, start, end));
  14. },
  15. tasks: new kendo.data.SchedulerDataSource({
  16. batch: true,
  17. transport: {
  18. read: {
  19. url: "api/Events",
  20. dataType: "json"
  21. },
  22. parameterMap: function (options, operation) {
  23. if (operation !== "read" && options.models) {
  24. return {
  25. models: kendo.stringify(options.models)
  26. };
  27. }
  28. },
  29. },
  30. schema: {
  31. model: {
  32. id: "taskId",
  33. fields: {
  34. taskId: { from: "TaskID", type: "number" },
  35. title: { from: "Title", defaultValue: "No title", validation: { required: true } },
  36. start: { type: "date", from: "Start" },
  37. end: { type: "date", from: "EndDate" },
  38. startTimezone: { from: "StartTimezone" },
  39. endTimezone: { from: "EndTimezone" },
  40. description: { from: "Description" },
  41. recurrenceId: { from: "RecurrenceID" },
  42. recurrenceRule: { from: "RecurrenceRule" },
  43. recurrenceException: { from: "RecurrenceException" },
  44. isAllDay: { type: "boolean", from: "IsAllDay" }
  45. }
  46. }
  47. }
  48. })
  49. });
  50. kendo.bind($("#example"), viewModel);
Result in Browser:
References