2013-12-10 10 views
5

Ho appena iniziato a sperimentare con l'interfaccia utente di Kendo e sono rimasto bloccato su come utilizzare un oggetto javascript standard da utilizzare come origine dati.Dati UI di KendoInserire utilizzando l'oggetto javascript

È abbastanza facile caricare inizialmente i dati dall'oggetto javascript, ma voglio essere in grado di recuperare i dati dopo che sono avvenute modifiche nell'interazione dell'utente.

Preferibilmente, se questo oggetto è in qualche modo sincronizzato con il widget, quindi tutto ciò che si deve fare è leggere/scrivere su questo oggetto javascript.

I nostri dati:

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 
}); 

Ecco la configurazione di codice da testare (notare il debug di console.log su Save):

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

Come si può leggere/scrivere lo 'stato' nel mondo dell'interfaccia utente di Kendo?

risposta

9

Un semplice array non può fornire il rilevamento delle modifiche, in modo da viene convertito in un DataSource quando si crea il widget. È possibile accedere alla stato attuale dei vostri dati in diversi modi:

  1. ottenere un array per scorrere sopra all data: dataSource.data()
  2. accesso un specific item: dataSource.at(1)
  3. ottenere filtered data: datasource.view()
  4. ottenere un pure JS array indietro : dataSource.data().toJSON()
+0

"dataSource.data(). ToJSON()" funziona perfettamente.L'unico problema che sto vedendo è quando cancello e ottengo un evento 'remove'. Continuo a vedere l'evento nel dataSource ... – zaf

+0

@zaf Non capisco il problema - puoi aggiornare il tuo violino per illustrarlo? –

+0

http://jsfiddle.net/NZ4EM/9/ Vedo che probabilmente rimuove l'evento DOPO la chiamata alla funzione, perché se si eliminano entrambi si noterà che il debug diminuisce di uno. – zaf

2

Nonostante si inizializza il dataSource da un array JavaScript (_data), KendoUI crea internamente un DataSource (nel tuo caso un SchedulerDataSource) che utilizza solo l'array per il caricamento del contenuto iniziale.

Se è necessario/si desidera continuare a utilizzare l'array e riflettere le modifiche in esso, è probabile che sia necessario scrivere del codice per aggiornarlo.

Se si può vivere con _data definito come un ShedulerDataSource, allora si può provare definendolo come:

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" 
     } 
    } 
}); 

vedere in esecuzione qui: http://jsfiddle.net/OnaBai/t23Ce/14/

+0

Grazie per quello. Vedo che l'oggetto _data viene aggiornato e posso scorrere l'oggetto '_data' all'interno di quello e quindi codificare e decodificare JSON per ottenere finalmente qualcosa che assomigli alla struttura dei dati di input originali. Probabilmente sono io, ma sicuramente sembra saltare attraverso diversi cerchi per arrivare ai dati. Deve esserci qualche metodo magico da qualche parte ... – zaf

+0

@zaf - se hai bisogno di ottenere un array "puro" JavaScript dei dati nel DataSource, puoi farlo anche io - Ho aggiornato la mia risposta –

+1

@zaf, ottenendo i dati come JavaScript - per leggere- è facile come fare '_data.data()' ma non dovresti aggiornare questo array dato che le modifiche non si rifletteranno nell'interfaccia utente. – OnaBai