2014-02-13 3 views
22

Есть ли способ вызвать событие после перезагрузки сетки через ajax?Kendo UI Grid post визуализируется или публикуется событие с данными?

Я вижу 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 
} 

как примечание стороны .. Я имею очень сложно найти надежную ссылку на API mvc grid кендо. когда я говорю об этом в Google, я получаю следующее: http://docs.telerik.com/kendo-ui/getting-started/using-kendo-with/aspnet-mvc/migration/widgets/grid , который представляет собой сборник небольших практических и некоторых «событий», но это не соответствует тому, что я вижу в бритвой intelisense.

обновление: добавление определение с привязкой к данным

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

и здесь сетки определение Аякса

.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>"); 

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

+0

Событие DataBound запускается после обновления DOM; если вы не получаете ожидаемого результата, есть проблема с вашим кодом, поэтому вы должны добавить, что –

+0

@ LarsHöppner добавил этот код .. дайте мне знать, если потребуется больше. –

+0

Эти элементы span.editable являются частью шаблона? –

ответ

11

Смотрите этот пример код, взятый из documentation (API документов на события here) о том, как связать обработчик событий с помощью 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..'); 
    } 
}); 

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

+0

прямо на .. я пропустил эту часть нового экземпляра, и события, которые я смотрел, были на DataSource, а не на Grid. проблема с документацией, которую вы опубликовали, это длинный a-z как статья. Я действительно хотел найти только документацию по событиям api .. которая казалась невыполнимой задачей –

+1

на самом деле DataBound все еще происходит слишком рано. это происходит одновременно с возвратом коллекции, но до того, как содержимое будет отображено. Я знаю это потому, что я вызываю некоторый javascript, который выбирает отображаемые элементы. Я отправлю образец –

+1

добавлен тестовый код –