Столбец Kendo UI Grid отправил или отправил сообщение об ошибке?
Есть ли способ инициировать событие после перезагрузки сетки через ajax?
Я вижу событие RequestEnd. но это, похоже, произойдет, когда запрос вернется, но до обновления сетки.
Я также вижу событие DataBound. но это происходит даже раньше, чем RequestEnd,
также когда я реализую событие DataBound, мой заголовок исчезает.
Мне пришлось прибегнуть к этому хаку
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
}
как побочная заметка. Мне очень сложно найти надежную ссылку на mvc-сетку kendo grid. когда я google для этого, я получаю это:
http://docs.telerik.com/kendo-ui/getting-started/using-kendo-with/aspnet-mvc/migration/widgets/grid
который представляет собой сборник небольших практических и некоторых "событий", но это не соответствует тому, что я вижу в бритвенной мозге.
update: добавление определения привязки
$('#grid').kendoGrid({
dataBound: function(e) {
console.debug('data bound..');
}
});
и здесь определение сетки ajax
.Ajax().Read(read => read
.Action("FilesRead", "SomeController")
.Data("readData"))
function readData() {
return {
IncludeChildren: $("#IncludeChildren").is(':checked'),
SearchString: $('input[id=SearchString]').val()
};
}
Я вижу, что DataBound запускается при вызове ajax, а не после его возврата.
обновление
скорректировал привязку события DataBound.
в функции dataBound, я пытаюсь получить ссылку на вновь создаваемые шаблоны..
function dataBound(o) {
console.debug($('span.editable').length); // returns 0
setTimeout("console.debug($('span.editable').length)", 500); // returns 4
}
промежутки добавляются с использованием шаблона клиента
.ClientTemplate(@"<span class=""editable"" ... >#=DOCUMENT_DATE_FORMATTED#</span>");
посмотри, что я имею в виду? привязка данных происходит до отображения сетки
Ответы
Ответ 1
См. этот пример кода, взятый из документации (API-документы о событиях здесь) о том, как связать обработчик событий с помощью оболочек 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>
Если вы хотите связать обработчик в JavaScript, вам нужно получить доступ к сетке следующим образом:
var grid = $("#grid").data("kendoGrid");
grid.bind("dataBound", function(e) {});
Когда вы сделаете это здесь:
$('#grid').kendoGrid({
dataBound: function(e) {
console.debug('data bound..');
}
});
вы фактически создаете новый экземпляр сетки.