2014-02-13 7 views
22

Gibt es eine Möglichkeit, ein Ereignis auszulösen, nachdem das Grid über Ajax neu geladen wurde?Kendo UI Grid-Post gerendert oder nach Databound-Ereignis?

Ich sehe die RequestEnd Ereignis. aber das scheint zu passieren, wenn die Anfrage zurückgegeben wurde, aber bevor das Gitter aktualisiert wurde.

Ich sehe auch DataBound Ereignis. aber das passiert sogar früher als RequestEnd,
auch wenn ich Databound-Ereignis implementieren, mein Kopf verschwindet ..

musste ich diese greifen hacken

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 
} 

als Randnotiz .. Ich habe ein sehr schwer, eine zuverlässige kendo grid mvc API Referenz zu finden. wenn ich google für sie, bekomme ich das: http://docs.telerik.com/kendo-ui/getting-started/using-kendo-with/aspnet-mvc/migration/widgets/grid das ist eine Sammlung von kleinen how-to und einige "Events", aber diese entsprechen nicht, was ich in Rasierapparat Intelissense sehen.

Update: Hinzufügen von Databound-Definition

$('#grid').kendoGrid({ 
     dataBound: function(e) { 
      console.debug('data bound..'); 
     } 
    }); 

und hier ist Gitter Ajax Definition

.Ajax().Read(read => read 
     .Action("FilesRead", "SomeController") 
     .Data("readData")) 

function readData() { 
    return { 
     IncludeChildren: $("#IncludeChildren").is(':checked'), 
     SearchString: $('input[id=SearchString]').val() 
    }; 
} 

ich kann sehen, dass Databound ausgelöst wird, während die Ajax-Aufruf zu machen, nicht nachdem er zurückkommt.

Update

das Databound Hook korrigiert.

in Databound-Funktion, ich versuche zu neu gerendert Vorlagen einen Verweis zu bekommen ..

function dataBound(o) { 
    console.debug($('span.editable').length);     // returns 0 
    setTimeout("console.debug($('span.editable').length)", 500); // returns 4 
} 

die Spannweiten einer Kunden-Template

.ClientTemplate(@"<span class=""editable"" ... >#=DOCUMENT_DATE_FORMATTED#</span>"); 

sehen, was ich meine mit hinzugefügt werden? Daten gebunden geschieht, bevor Gitter aus den documentation genommen gemacht wird

+0

das DataBound-Ereignis wird ausgelöst, nachdem das DOM aktualisiert wurde; Wenn Sie das erwartete Ergebnis nicht erhalten, liegt ein Problem mit Ihrem Code vor, daher sollten Sie hinzufügen, dass –

+0

@ LarsHöppner diesen Code hinzugefügt hat. Lassen Sie es mich wissen, wenn mehr benötigt wird. –

+0

diese span.editable Elemente sind Teil der Vorlage? –

Antwort

11

Sehen Sie diesen Beispielcode (API-Dokumentation über die Ereignisse here sind), wie ein Event-Handler mit MVC-Wrapper binden:

@(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> 

Wenn Sie binden möchten ein Handler in JavaScript, müssen Sie das Raster wie diese zuzugreifen:

var grid = $("#grid").data("kendoGrid"); 
grid.bind("dataBound", function(e) {}); 

Wenn Sie dies hier tun:

$('#grid').kendoGrid({ 
    dataBound: function(e) { 
     console.debug('data bound..'); 
    } 
}); 

Sie erstellen tatsächlich eine neue Grid-Instanz.

+0

direkt auf .. Ich vermisste diesen neuen Instanzteil, und die Ereignisse, die ich betrachtete, waren auf DataSource, und nicht auf Grid. das Problem mit der Dokumentation, die Sie gepostet haben, ist es eine lange a-z wie Artikel. Ich wollte wirklich nur eine Event-API-Dokumentation finden .. die wie eine unmögliche Aufgabe schien –

+1

eigentlich DataBound passiert noch zu früh. es passiert zur gleichen Zeit wie die Sammlung zurück, aber bevor der Inhalt gerendert wird. Ich weiß dies, weil ich ein Javascript, das gerenderte Elemente wählt aufrufen .. ich werde eine Probe –

+1

hinzugefügt Testcode –