2013-12-10 16 views
5

Po prostu zacząłem eksperymentować z interfejsem użytkownika Kendo i utknąłem na tym, jak można użyć standardowego obiektu javascript do użycia jako źródło danych.Źródło danych dla Kendo jest ustawiane za pomocą obiektu javascript

To dość łatwe do początkowego załadowania danych z obiektu javascript, ale chcę mieć możliwość odzyskania danych po wystąpieniu zmian w wyniku interakcji użytkownika.

Najlepiej, jeśli ten obiekt jest w jakiś sposób zsynchronizowany z widżetem, więc wszystko co musisz zrobić, to odczytać/zapisać do tego obiektu javascript.

Nasze dane:

var _data = [ 
{ 
    eventID: 8, 
    title: "Group meeting.", 
    start: new Date("2013/06/13 07:00"), 
    end: new Date("2013/06/13 08:30"), 
    pending:false, 
    recurrenceRule: "", 
    recurrenceException: "", 
    description: "Take my brother to his group meeting.", 
    isAllDay:false, 
    ownTimeSlot:true, 
    careAssistantId: 5, 
    clientId: 6 
},{ 
    eventID: 9, 
    title: "Make dinner.", 
    start: new Date("2013/06/13 11:00"), 
    end: new Date("2013/06/13 13:30"), 
    pending:true, 
    recurrenceRule: "", 
    recurrenceException: "", 
    description: "Make dinner for my mom.", 
    isAllDay:false, 
    ownTimeSlot:true, 
    careAssistantId: 5, 
    clientId: 6 
} ]; 

Init widget:

function save(){ 
    console.log(_data);  
} 

$('.schedule').kendoScheduler({ 
     date: new Date("2013/6/13"), 
     startTime: new Date("2013/6/13 07:00 AM"), 
     height: 600, 
     views: [ { type: "week", selected: true }], 
     save: save, 
     dataSource:_data 
}); 

Oto kod instalacyjny do przetestowania (uwaga console.log debug SAVE):

http://jsfiddle.net/t23Ce/11/

Jak należy czytać/pisać "stan" w świecie Kendo UI?

Odpowiedz

9

Prosta tablica nie może zapewnić śledzenie zmian, dzięki czemu jest konwertowany na DataSource podczas tworzenia widżetu. Możesz uzyskać dostęp do aktualnego stanu danych na różne sposoby:

  1. dostać tablicą iteracyjne nad all data: dataSource.data()
  2. dostęp do specific item: dataSource.at(1)
  3. dostać filtered data: datasource.view()
  4. uzyskać pure JS array powrotem : dataSource.data().toJSON()
+0

"DataSource.data(). ToJSON()" działa idealnie.Jedyny problem, jaki widzę, to usunięcie i otrzymanie zdarzenia "usuń". Nadal widzę zdarzenie w źródle danych ... – zaf

+0

@zaf Nie rozumiem problemu - czy możesz zaktualizować swoje skrzypce, aby je zilustrować? –

+0

http://jsfiddle.net/NZ4EM/9/ Widzę, że prawdopodobnie usunęło zdarzenie PO wywołanie funkcji, ponieważ jeśli usuniesz oba zauważysz zmniejszenie debugowania o jeden. – zaf

2

Pomimo zainicjować dataSource z tablicy JavaScript (_data) KendoUI wewnętrznie tworzy DataSource (w Twoim przypadku SchedulerDataSource), które wykorzystuje tylko swoją tablicę do ładowania początkowej zawartości.

Jeśli potrzebujesz/chcesz nadal używać tablicy i odzwierciedlać zmiany w niej, prawdopodobnie będziesz musiał napisać kod do jej aktualizacji.

Jeśli można żyć z _data zdefiniowanej jako ShedulerDataSource, to można spróbować określając ją jako:

var _data = new kendo.data.SchedulerDataSource({ 
    data: [ { 
     eventID: 8, 
     title: "Group meeting.", 
     start: new Date("2013/06/13 07:00"), 
     end: new Date("2013/06/13 08:30"), 
     pending:false, 
     recurrenceRule: "", 
     recurrenceException: "", 
     description: "Take my brother to his group meeting.", 
     isAllDay:false, 
     ownTimeSlot:true, 
     careAssistantId: 5, 
     clientId: 6 
    },{ 
     eventID: 9, 
     title: "Make dinner.", 
     start: new Date("2013/06/13 11:00"), 
     end: new Date("2013/06/13 13:30"), 
     pending:true, 
     recurrenceRule: "", 
     recurrenceException: "", 
     description: "Make dinner for my mom.", 
     isAllDay:false, 
     ownTimeSlot:true, 
     careAssistantId: 5, 
     clientId: 6 
    } ], 
    schema: { 
     model : { 
      id : "eventID" 
     } 
    } 
}); 

Zobacz pracuje tutaj: http://jsfiddle.net/OnaBai/t23Ce/14/

+0

Dzięki za to. Widzę, że obiekt _data jest aktualizowany i mógłbym iterować nad obiektem "_ata" wewnątrz tego, a następnie Json kodował i dekodował, by w końcu uzyskać coś, co przypomina oryginalną strukturę danych wejściowych. To pewnie ja, ale na pewno wygląda na to, że przeskakuję przez kilka kółek, żeby dostać się do danych. Musi być gdzieś jakaś magiczna metoda ... – zaf

+0

@zaf - jeśli potrzebujesz "czystej" tablicy JavaScript danych w DataSource, możesz to zrobić - zaktualizowałem moją odpowiedź: –

+1

@zaf, pobieranie danych jako JavaScript - do czytania - jest tak proste, jak wykonanie '_data.data()', ale nie powinieneś aktualizować tej tablicy, ponieważ zmiany nie będą odzwierciedlone w interfejsie użytkownika. – OnaBai

Powiązane problemy