Подтвердить что ты не робот

Столбец 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>");

посмотри, что я имею в виду? привязка данных происходит до отображения сетки

4b9b3361

Ответ 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..');
    }
});

вы фактически создаете новый экземпляр сетки.