【发布时间】:2010-12-21 00:58:48
【问题描述】:
我一直在成功使用 jqGrid;但是,我遇到了一些我似乎无法正常工作的东西。我通过 AJAX 将网格定义作为 PartialViewResult 返回并将结果附加到 div。
然后我想更改所述网格的双击事件。我正在使用 Firebug,似乎可以使用 $('#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 应用程序的服务器端动态构建网格。我仍在异步检索网格的数据。现在效果很好。
【问题讨论】:
标签: jquery asp.net-mvc jqgrid