Morning,
I've created a widget that uses the KendoScheuler inside a kendoWindow and sets its DataSource dynamically. Code below, shortened for brevity:
CODE:
function
openWindow(optionOverrides) {
var
options = {
/**
* @type {Array | kendo.data.SchedulerDataSource}
* @required
* The dataSource where existing events are read from, can be a kendo.data.SchedulerDataSource or a JavaScript Array.
* If an array is used a new kendo.data.SchedulerDataSource will be created with the 'data' attribute set as the array
*/
dataSource:
null
};
//Validate a dataSource exists
if
(!validateArgument(optionOverrides.dataSource, [
"object"
])) {
console.error(
"SchedulerDataSource of incorrect type. Expected: object; found: "
+
typeof
optionOverrides.dataSource);
return
false
;
}
else
{
if
((optionOverrides.dataSource).constructor == Array) {
//If the optionOverrides.dataSource is an array, use it to create a new kendo.data.SchedulerDataSource containing the array data
var
schedulerDS =
new
kendo.data.SchedulerDataSource({
data: optionOverrides.dataSource
});
options.dataSource = schedulerDS;
}
else
if
((optionOverrides.dataSource).constructor == kendo.data.SchedulerDataSource) {
//Use optionOverrides.dataSource if it is already a kendo.data.SchedulerDataSource
options.dataSource = optionOverrides.dataSource;
}
else
{
console.error(
"optionOverrides.dataSource object not of type Array or kendo.data.SchedulerDataSource"
);
return
false
;
}
}
var
dfd = $.Deferred();
var
result =
null
;
$(
"<div />"
)
.attr(
"id"
,
"window-schedulerWindow"
)
.appendTo(
"body"
)
.kendoWindow({
visible:
false
,
modal:
true
,
resizable:
false
,
title: options.title,
activate:
function
(e) {
//Hide the headers of the scheduler
var
timePickerScheduler = $(
"#scheduler-scheduleTimePickerWindow-timePicker"
).data(
"kendoScheduler"
);
//Set data source after initialization. Prevents data being loaded before the scheduler is ready
timePickerScheduler.setDataSource(options.dataSource);
},
open:
function
(e) {
var
timePickerScheduler = $(
"#scheduler-scheduleTimePickerWindow-timePicker"
).kendoScheduler({
/* Attributes removed for Brevity */
edit: function(e) {
e.preventDefault(); //prevent default event editing
//Retrieve and sync the dataSource with the new event generated in the 'add' callback
var dataSource = this.dataSource;
dataSource.sync();
}
}).getKendoScheduler();
}
}).data(
"kendoWindow"
)
.content($(
"#template-schedulerTimePickerWindow"
).html())
.center()
.open();
return
dfd.promise();
}
The Problem:
So the issue Im having is that if the SDS is created fresh from an array of Event Objects, everything works fine, however, if I specify an already existing SDS, that uses remote data, and then start dragging and resizing events, I get the error: "Cannot read property 'data' of undefined", which points to statement 'dataSource.sync();' in the 'edit' event of my scheduler.
Is there some kind of sync trying to happen with the remote SDS? I monitored my network activity and didnt see anything.
Please advise, Thanks,
Grant