2015-05-24 24 views
6

Voglio una colonna auto increment nella mia griglia Kendo. Questo campo non è l'incremento automatico lato server, perché voglio che l'utente veda il valore e sia in grado di cambiarlo.Valore predefinito dinamico per Kendo Grid

La mia soluzione attuale è quella di aggiungere un attributo click al pulsante Create e ripetere il ciclo su file per trovare il valore più alto e incrementarlo.

Ma come posso inserire questo valore all'interno della riga appena creata? L'evento Click si verifica prima che venga creata la nuova riga.

Quindi ci sono due possibili soluzioni:

  1. avere una variabile come valore di default e aggiornarlo nel mio codice JS.
  2. Accedi in qualche modo alla riga appena creata e aggiorna il valore.

Questo è il mio codice JS:

function createClick(id) { 
    var grid = $("#" + id).data('kendoGrid'); 
    var highestRadif = 0; 
    grid.tbody.find('>tr').each(function() { 
     var dataItem = grid.dataItem(this); 
     var radif = dataItem.SRadifReqR; 
     highestRadif = highestRadif < radif ? radif : highestRadif; 
    }) 
    alert(++highestRadif); 
} 

risposta

5

È possibile utilizzare l'evento di griglia edit aggiungere la nuovo valore generatedId alla nuova griglia di model.

Si tratta di una spiegazione da loro documentation:

Modifica

sparato quando le modifiche utente o crea un elemento di dati.

  • e.containerjQuery, jQuery oggetto dell'elemento modifica contenitore, che avvolge l'interfaccia utente di modifica.
  • e.modelkendo.data.Modello, L'elemento di dati che sta per essere modificato. Usa il suo metodo isNew per verificare se l'elemento dati è nuovo (creato) o meno (modificato).
  • e.senderkendo.ui.Grid, istanza del widget che ha generato l'evento.

Suppongo che il vostro scatto avere qualcosa di simile

//generate id code 
vm.newId = ++highestRadif; // we need to store generated Id 
grid.addRow(); 

poi su Modifica evento

edit: function(e) { 
    var model = e.model; // access edited/newly added model 
    // model is observable object, use set method to trigger change event 
    model.set("id", vm.newId); 
} 

Nota: di campo del modello di schema deve impostare la proprietà editable: true, a causa di abilitare per cambiare il valore del campo del modello usando il metodo set. Inoltre, se lo schema del campo ha richiesto la convalida, è necessario rimuoverlo.

model: { 
    id: "ProductID", 
    fields: { 
     ProductID: { editable: true, nullable: true }, 
    } 
} 

Sample

+0

Cosa intendi per 'vm'? Cos'è quello? – Akbari

+1

È solo una vista della variabile del modello. se non si utilizza l'oggetto del modello di vista, è possibile utilizzare la variabile dell'ambito della finestra (ad esempio 'window.newId') –

+0

Sarà molto più semplice scrivere l'intero metodo nella funzione' Modifica'. Sai come posso ottenere il 'Grid' da' e'? Grazie per il tuo aiuto e attenzione. – Akbari

0

sono stato in grado di mettere una funzione nello schema origine dati per questo.

schema: { 
    model: { 
     id: "id", 
     fields: { 
      currencyType: { defaultValue: getDefaultCurrency }, 
      invoiceDate: { type: "date" } 
     } 
    } 
} 

    function getDefaultCurrency() { 
     return _.find(vm.currencyTypes, { id: vm.currencyId }); 
    };