Чтобы начать использовать пользовательский интерфейс Kendo для работы с календарем, я сначала начинаю, вытягивая события из Salesforce org и просто отображая их по расписанию. . Тем не менее, я время страдает от «Не удается прочитать свойство„getTimezoneOffset“неопределенных ошибок, и я ищу помощи Мой JS является:Ошибка Kendo-UI «GetTimezoneOffset»
var data = '{!jsonString}';
var scheduler = $('#scheduler').kendoScheduler({
date: new Date(),
startTime: new Date(),
height: 700,
timezone: "Etc/UTC",
views: [
{type: "week", selected: true},
"week",
"month",
"agenda"
],
dataSource: {
batch: true,
transport: {
read: function(e){
console.log(data);
e.success(data);
},
update: {
url: "http://demos.telerik.com/kendo-ui/service/tasks/update",
dataType: "jsonp"
},
create: {
url: "http://demos.telerik.com/kendo-ui/service/tasks/create",
dataType: "jsonp"
},
destroy: {
url: "http://demos.telerik.com/kendo-ui/service/tasks/destroy",
dataType: "jsonp"
},
parameterMap: function(options, operation) {
if (operation !== "read" && options.models) {
return {models: kendo.stringify(options.models)};
}
}
},
schema: {
model: {
id: "OwnerId",
fields: {
taskId: { from: "TaskID" },
title: { from: "Title", defaultValue: "No title", validation: { required: true } },
start: { type: "date", from: "Start" },
end: { type: "date", from: "EndTime" },
startTimezone: { from: "StartTimezone" },
endTimezone: { from: "EndTimezone" },
description: { from: "Description" },
recurrenceId: { from: "RecurrenceID" },
recurrenceRule: { from: "RecurrenceRule" },
recurrenceException: { from: "RecurrenceException" },
ownerId: { from: "OwnerID", defaultValue: 1 },
isAllDay: { type: "boolean", from: "IsAllDay" }
}
}
}
}
//});
});
И переменная данных JSON в формате:
[{«Название»: «встреча», «TaskId»: «00U410000059ZjBEAE», «StartTimezone»: «Etc/UTC», «Start»: «2017-01-26», «RecurrenceRule»: null, «RecurrenceId» : null, «RecurrenceException»: null, «OwnerId»: «005410000020eLnAAI», «IsAllDay»: false, «EndTimezone»: «Etc/UTC», «End»: «2017-01-26», «Описание ":" собрание "}, {" Название ":" meeti ng ", " TaskId ":" 00U410000059ZjcEAE "," StartTimezone ":« Etc/UTC », « Пуск »:« 2017-01-26 »,« RecurrenceRule »: null,« RecurrenceId »: null, « RecurrenceException ": null," OwnerId ":" 005410000020eU9AAI ", " IsAllDay ": false," EndTimezone ":" Etc/UTC "," End ":" 2017-01-26 ", " Описание ":" собрание " }, и т. д.}}
В соответствии с консолью.log (данные) в операции чтения. У меня есть контроллер, который получает массив событий, а затем JSON.serializes этот массив (который является JSON String, к которому обращаются данные).
Я не понимаю, какова проблема с смещением часового пояса, все мои данные ввода JSON соответствуют полям схемы учебников, и она по-прежнему не работает ... Мне нужен календарь, чтобы отображать все события, которые в настоящее время существуют, когда он открывается, передавая этот JSON в операцию чтения. Любая помощь будет невероятно оценена! Спасибо.
Вот мой контроллер:
global with sharing class CalendarData {
public List<Event> eventList{get;set;}
public String jsonString{get;set;}
public List<schedulerItem> correctedItems{get;set;}
public CalendarData(){
String eventQuery = 'SELECT ActivityDate,ActivityDateTime,CreatedById,Description,DurationInMinutes,EventSubtype,IsAllDayEvent,Location,OwnerId,EndDateTime,StartDateTime,Subject FROM Event';
eventList = Database.query(eventQuery);
correctedItems = itemList(eventList);
system.debug(correctedItems);
jsonString = JSON.serialize(correctedItems);
jsonString = jsonString.replace('"EndTime"', '"End"');
}
public List<schedulerItem> itemList(List<Event> events){
Integer i = 0;
system.debug(events);
List<schedulerItem> kendoEvents = new List<schedulerItem>();
schedulerItem item = new schedulerItem();
for(i = 0; i < events.size(); i++){
item.Description = events[i].Description;
Datetime dt = events[i].EndDateTime;
item.EndTime = dt.date();
dt = events[i].StartDateTime;
item.Start = dt.date();
item.EndTimezone = 'Etc/UTC';
//public String id;
item.IsAllDay = events[i].IsAllDayEvent;
item.RecurrenceException = null;
item.RecurrenceId = null;
item.RecurrenceRule = null;
item.StartTimezone = 'Etc/UTC';
item.Title = events[i].Subject;
item.TaskId = events[i].Id;
item.OwnerId = events[i].OwnerId;
system.debug(item);
kendoEvents.add(item);
item = new schedulerItem();
}
return kendoEvents;
}
public class schedulerItem{
public String Description;
public Date EndTime;
public Date Start;
public String EndTimezone;
//public String id;
public Boolean IsAllDay;
public String RecurrenceException;
public String RecurrenceId;
public String RecurrenceRule;
public String StartTimezone;
public String Title;
public String TaskId;
public String OwnerId;
}
}
получить список событий, а затем использовать пользовательский класс, чтобы создать новый список, чтобы связать данные из списка оригинальных событий для событий с именами данных, которые соответствуют схеме имена моделей из учебника. Я также заменю все «EndTime» на «End».
Найдено решение, чтобы прочитать мои события:
var data = '{!jsonString}';
var dataList = JSON.parse(data);
function getNewEvents() {
var eventList = [];
for(var i = 0; i < dataList.length; i++){
//console.log("DataList Again: " + dataList[i]);
var kendoEvent = new kendo.data.SchedulerEvent({
id: i,
taskId: dataList[i].TaskId,
title: dataList[i].Title,
start: new Date(dataList[i].Start),
end: new Date(dataList[i].End),
startTimezone: dataList[i].StartTimezone,
endTimezone: dataList[i].EndTimezone,
description: dataList[i].Description,
recurrenceId: dataList[i].RecurrenceId,
recurrenceRule: dataList[i].RecurrenceRule,
recurrenceException: dataList[i].RecurrenceException,
ownerId: dataList[i].OwnerId,
isAllDay: dataList[i].IsAllDay
});
eventList.push(kendoEvent);
}
return eventList;
}
eventData = getNewEvents();
Я взял мой возвращаемый массив JSON, а затем разобран его обратно только массив объектов, то создается новый массив фактических kendo.data.SchedulerEvents и заполненные во всех полях правильными именами. Тогда в моей операции чтения в источнике данных, вместо URL и типа данных, я сделал:
read: function(e){
e.success(data);
}
Если данные моего массив кэндо планировщика событий. Теперь мое расписание показывает все события в моей организации. Теперь мне нужно будет работать над обновлением, уничтожать и создавать операции :). Ссылки, представленные в комментариях к принятому ответу, помогли мне найти это решение с необходимой документацией.
наиболее частой причиной ошибка «getTimezoneOffset of null» неверно передана/задана значения даты. –