Sto provando a costruire una griglia Kendo CRUD molto semplice con una tabella che ha solo due colonne: ID e Nome. Ho configurato la griglia con paginazione server e filtraggio server.Kendo Grid non aggiorna la griglia con l'ID appena creato dopo la creazione
Tutto sembra funzionare come previsto ma dopo la creazione del nuovo record, la griglia mostra il nuovo record ma senza campo ID. Alla creazione, la richiesta ha un ID null ma sto inviando il valore di id e l'oggetto completo dopo la creazione. Nelle griglie di esempio, la griglia viene aggiornata con nuovi valori. Cosa devo modificare/aggiungere per garantire che l'ID del record appena creato venga visualizzato anche in Grid?
In seguito è la JSP:
<script>
$(function() {
var dataSource = new kendo.data.DataSource({
transport: {
read: {
url:"http://localhost:8181/baseweb/countrylist",
dataType: "jsonp"
},
update: {
url: "http://localhost:8181/baseweb/countryupdate",
dataType: "jsonp"
},
destroy: {
url: "http://localhost:8181/baseweb/countrydelete",
dataType: "jsonp"
},
create: {
url: "http://localhost:8181/baseweb/countrycreate",
dataType: "jsonp"
},
parameterMap: function(data, operation) {
if (operation !== "read" && data.models) {
return {grid_options: kendo.stringify(data.models)};
}
return {grid_options: kendo.stringify(data)};
}
},
serverPaging: true,
serverFiltering: true,
pageSize: 10,
schema: {
data: "data",
total: "total",
model: {
id: "id",
fields: {
id: { editable: false, nullable: true },
name: { validation: { required: true } }
}
}
}
});
$("#grid").kendoGrid({
dataSource: dataSource,
pageable: true,
filterable: true,
height: 400,
toolbar: ["create"],
columns: [
{ field: "id", title:"Identification"},
{ field: "name", title:"Country Name" },
{ command: ["edit", "destroy"], title: " ", width: "160px" }
],
editable: "popup"
});
});
</script>
parametri inviati al server su Crea: _ 1380846899054 callback jQuery19108827040256333442_1380846899052 grid_options { "id": null, "name": "testing"}
Parametro rimandato dal server come risposta: jQuery19108827040256333442_1380846899052 ([{ "id": "4028828f4180d64a014180e3bda20002", "name": "test"}])
Mi aspetto che l'ID restituito dal server debba essere visualizzato nella griglia. Ho cercato questo forum, la documentazione di Kendo e Google per una risposta, ma non sono in grado di trovare una soluzione.
Cosa mi manca?
Aggiornamento con la soluzione:
Jack's answer fornito l'indizio per trovare la soluzione. Stavo facendo due errori:
a. Il callback in Kendo Grid sembra aspettarsi i dati in un attributo "data:". Non stavo nominando il risultato come "dati:" nella mia risposta. b. Il callback prevede inoltre un JSONArray di oggetti nell'attributo data:. Stavo inviando un oggetto JSONO poiché stavo creando un solo oggetto.
Dopo aver modificato la risposta per includere dati: attributo e JSONArray, funziona perfettamente. Il parametro di richiesta da parte del cliente si presenta così:
_ 1386350196768
callback jQuery19101285024500179227_1386350196765
grid_options {"id":null,"name":"Ghana"}
La risposta a cura assomiglia a questo:
jQuery19101285024500179227_1386350196765({"data":[{"id":"2c9323ca42c8df630142c944450b0002","name":"Ghana"}]})
Speranza che aiuta qualcun altro in quanto questo non è chiaramente documentato nella documentazione ufficiale.
Lo hai mai capito? Sto avendo lo stesso problema, l'ID che sto restituendo non è impostato nel set di dati del cliente, lasciandolo quindi come un elemento "nuovo". Incolla tutte le operazioni successive (crea, aggiorna, cancella). – Jack
La tua risposta mi ha aiutato a capire la soluzione. Grazie. Pubblicherò la mia risposta per assicurarmi che sia adeguatamente documentato per gli altri. – sohail