Existe-t-il un moyen de déclencher un événement après le rechargement de la grille via ajax?
je vois l'événement RequestEnd . mais cela semble se produire lorsque la demande est revenue, mais avant que la grille ne soit actualisée.
je vois aussi DataBound événement. mais cela se produit même plus tôt que RequestEnd,
également lorsque j'implémente un événement DataBound, mon en-tête disparaît.
j'ai dû recourir à ce hack
function requestEnd(o) {
console.debug('request ended.', o);
setTimeout(refreshEditable, 500); // enough time to render the grid
}
function refreshEditable() {
// perform my actions on controls within grid content
}
comme une note latérale .. J'ai du mal à trouver une référence fiable pour l'API mvc de la grille de kendo. quand je le recherche sur Google, j'obtiens ceci: http://docs.telerik.com/kendo-ui/getting-started/using-kendo-with/aspnet-mvc/migration/widgets/grid qui est une collection de petits how-to et quelques "Events" mais ceux-ci ne correspondent pas à ce que je vois dans razor intelisense.
mise à jour : ajout d'une définition de databound
$('#grid').kendoGrid({
dataBound: function(e) {
console.debug('data bound..');
}
});
et voici la définition de la grille ajax
.Ajax().Read(read => read
.Action("FilesRead", "SomeController")
.Data("readData"))
function readData() {
return {
IncludeChildren: $("#IncludeChildren").is(':checked'),
SearchString: $('input[id=SearchString]').val()
};
}
je peux voir que DataBound est déclenché lors de l'appel ajax, pas après son retour.
mise à jour
corrigé le hook d'événement DataBound.
dans la fonction dataBound, j'essaie d'obtenir une référence aux nouveaux modèles rendus ..
function dataBound(o) {
console.debug($('span.editable').length); // returns 0
setTimeout("console.debug($('span.editable').length)", 500); // returns 4
}
les portées sont ajoutées à l'aide d'un modèle client
.ClientTemplate(@"<span class=""editable"" ... >#=DOCUMENT_DATE_FORMATTED#</span>");
tu vois ce que je veux dire? la liaison des données se produit avant le rendu de la grille
Voir cet exemple de code extrait de la documentation (les documents API sur les événements sont ici ) sur la façon de lier un gestionnaire d'événements à l'aide de wrappers MVC:
@(Html.Kendo().Grid(Model)
.Name("grid")
.Events(e => e
.DataBound("grid_dataBound")
.Change("grid_change")
)
)
<script>
function grid_dataBound() {
//Handle the dataBound event
}
function grid_change() {
//Handle the change event
}
</script>
Si vous souhaitez lier un gestionnaire en JavaScript, vous devez accéder à la grille comme ceci:
var grid = $("#grid").data("kendoGrid");
grid.bind("dataBound", function(e) {});
Lorsque vous faites cela ici:
$('#grid').kendoGrid({
dataBound: function(e) {
console.debug('data bound..');
}
});
vous créez en fait une nouvelle instance de grille.
vous pouvez utiliser de cette façon:
transport: {
read: {
url: searchUrl,
type: "POST",
dataType: "json",
data: additionalData,
complete: function () {
//code here :)
}
},
},