2017-01-29 4 views
0

Чтобы начать использовать пользовательский интерфейс 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); 
} 

Если данные моего массив кэндо планировщика событий. Теперь мое расписание показывает все события в моей организации. Теперь мне нужно будет работать над обновлением, уничтожать и создавать операции :). Ссылки, представленные в комментариях к принятому ответу, помогли мне найти это решение с необходимой документацией.

+0

наиболее частой причиной ошибка «getTimezoneOffset of null» неверно передана/задана значения даты. –

ответ

1

Там может быть другой причиной, по этому вопросу, как я упомянул в комментариях, но глядя в код одной ошибки является неправильной конфигурацией модели, а также неправильной конфигурация

чтения Там нет входящих поля в формате JSON, как EndTime вместо этого Конец.

Изменение EndTime к Конец матча декларация поля с входящей JSON

{"Title":"meeting","IsAllDay":false,"EndTimezone":"Etc/UTC","End":"2017-01-26", "Description":"a meeting"} 

Вот декларация Поля

fields: { 
          taskId: { from: "TaskID" }, 
          title: { from: "Title", defaultValue: "No title", validation: { required: true } }, 
          start: { type: "date", from: "Start" }, 
// problem was here there is no EndTime as mentioned in the given code sample above . 
// changed to End as it is in the incoming JSON 
          end: { type: "date", from: "End" }, 
          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" } 
         } 

Для получения более подробной информации обратитесь к этим основным, например, на Telerik Веб-сайт.

http://demos.telerik.com/kendo-ui/scheduler/index

Правильная конфигурация Read

Пожалуйста, используйте это прочитал, я не уверен, что если ваш контроллер возвращать правильные данные и ваши привязки не является правильным

read: { url: "demos.telerik.com/kendo-ui/service/tasks";, dataType: "jsonp" } 
+0

Спасибо за ответ! Но я изменил EndTime до конца и все еще получаю ошибку. Правильно ли работает операция чтения? Это то, как вы успешно заполняете планировщик локальным массивом json? Я не могу понять, что не так :( –

+0

читать: { url: "https://demos.telerik.com/kendo-ui/service/tasks", dataType: "jsonp" } –

+0

Я добавил свой Кроме того, я изначально получил его для работы с тестом, который вы только что опубликовали. Однако это вызывает их предварительно установленные события. Поэтому после того, как я получил их, я хотел изменить операцию чтения, чтобы заполнить расписание локальными данными (мой восстановленный json массив событий из salesforce org). –

Смежные вопросы