网格加载和工作后,“JqGrid不是一个功能”

时间:2011-04-06 18:58:19

标签: javascript jquery jqgrid

首先......这是我正在使用的。 JQuery 1.4.4 JQuery-UI 1.8.11 JqG​​rid 3.8.2

以下是我在HTML中的内容

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.11/jquery-ui.min.js"></script>

<script type="text/javascript" src="/resources/default/scripts/jquery/jqGrid/i18n/grid.locale-en.js"></script>

<script type="text/javascript" src="/resources/default/scripts/jquery/jqGrid/jquery.jqGrid.3.8.2.min.js"></script>

所有这些脚本链接都正常运行。 这是我的网格定义:

$('#adminPermissionsGrid').jqGrid({
    url:'/admin/permission/get-permissions',
    mtype: 'GET',
    datatype: 'json',
    jsonReader: {
        id: 'id',
        repeatitems: false
    },
    colModel: adminPermissionsColumnModel,
    pager: '#adminPermissionsPager',
    rowNum: 50,
    altRows: true,
    hidegrid: false,
    sortname: 'resource',
    autowidth: true,
    height: 450,
    gridview: true,
    viewrecords: true,
    caption: translate.admin_table_permission_caption,
    onSelectRow: function(rowId, status) {
        populatePermissionForm(rowId);
    }
})
.navGrid('#adminPermissionsPager',{add:false, edit:false, del:false, search:false, refresh:true});

这里是“populatePermissionForm()”

function populatePermissionForm(rowId)
{
    //TODO : WTF? Why can't I use jqgrid functions here?
    var rowData = $('#adminPermissionsGrid').jqGrid('getRowData', rowId);
    ...
}

所以这是我的问题。我用$(document).ready()加载网格。网格按预期工作,其中包含大约20行数据。当我点击其中一行时,我在firebug中收到以下错误:

$("#adminPermissionsGrid").jqGrid is not a function

据报道,这条线是罪魁祸首:

var rowData = $('#adminPermissionsGrid')。jqGrid('getRowData',rowId);

我用Firebug检查了$(“#adminPermissionsGrid”),看起来网格对象仍然附着在它上面。我花了好几个小时试图找到答案。似乎在初始加载后,我无法使用任何网格方法。我有一个HACKY解决方法,可以浏览网格的DOM,但我不想这样做......

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我使用 noConflict 方法遇到了与 jQgrid ZfDebug 相同的问题。

首先加载ZfDebug工具栏脚本,然后它首先查找jQuery ...没有机会找到它,因为它本身就是第一个!所以它从google api获得了旧版本的jQuery,问题就开始了。

您可以将ZfDebug作为选项发送到您想要的jQuery版本的路径,无论是否在本地。在你的application.ini中:

zfdebug.jquery_path = "/my_path_to_jquery/jquery-xxx.min.js"

(如果您愿意,可以作为引导程序中选项数组的成员)。

答案 1 :(得分:0)

罪魁祸首找到了!我正在使用Zend的ZFDebug插件,它依赖于jQuery。此插件会自动打开noConflict。插件中没有选项来切换它,但是当我注释掉noConflict行时......一切都按预期工作。