Я успешно использую jqGrid; Тем не менее, я столкнулся с чем-то, что я не могу заставить работать. Я возвращаю определение сетки как PartialViewResult
через AJAX и добавляю результаты в div.
Затем я хотел бы изменить событие двойного щелчка для указанной сетки. Я использую Firebug и, кажется, могу добраться до элемента grid с помощью $('#my-grid')[0]
, но когда я пытаюсь вызвать методы, как показано ниже, он говорит мне, что jqGrid "не определен".
Я почти уверен, что у меня есть ссылки на jqGrid правильно, иначе я бы не зашел так далеко (я уже отображал и редактировал данные в сетках). Вот код, который получает и пытается изменить определение сетки:
$(document).ready(function() {
//Add the grid by pulling it via AJAX
$.get('<%=Url.Action("Grid","Entity", new {id = "CustomerAccount"}) %>', function(htmlResult) {
//Append grid definition to div
$('#customer-list').append(htmlResult);
var myGrid = $($('#CustomerAccount-grid')[0]);
$(myGrid).jqGrid('setGridParam', { ondblClickRow: function(rowid, iRow, iCol, e) { console.log('dblclicked'); } })
.trigger('reloadGrid');
//NOTE: I've tried with and without the reloadGrid
}
ОБНОВЛЕНИЕ: Я думаю, что теперь я пришел к выводу, что я уверен, что я ссылаюсь на элемент как объект jQuery, что существует проблема синхронизации. Упрощенная загрузка определения сетки ниже иллюстрирует проблему:
//Append grid definition to div
$('#customer-list').load('<%=Url.Action("Grid","Entity", new {id = "CustomerAccount"}) %>',function() {
console.log('sortname=' + $($('#CustomerAccount-grid:first')).jqGrid('getGridParam', 'sortname'));
});
В этих журналах sortname = undefined; однако, если я скопирую и вставлю ту же строку в Firebug, она отобразит sortname = Name, что правильно.
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ: большая часть моей проблемы, возможно, заключалась в том, что я не получал элемент как объект jQuery, поэтому я приписываю drachenstern решению (спасибо!), Но однажды по той причине, что обработчик событий все еще был это не связано с тем, что определение сетки извлекалось через AJAX, и его не было, когда я пытался связать ondblclickrow. Решение было простым: я просто добавил async: false к вызову определения сетки, так что я буду знать, что определение будет всегда до того, как будут добавлены обработчики событий и т.д. Я получаю определение сетки через AJAX, потому что я динамически строю сетки на стороне сервера моего приложения ASP.NET MVC. Я все еще получаю данные для сетки асинхронно. Отлично работает сейчас.