首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jqgrid使用clientArray内联保存时抛出错误

jqgrid使用clientArray内联保存时抛出错误
EN

Stack Overflow用户
提问于 2013-04-19 10:37:17
回答 2查看 2.7K关注 0票数 1

我是jqGrid的新手,我已经创建了一个简单的网格,其中包含本地数据,并将editurl设置为clientArray。我正在使用内联导航。我可以编辑一行,当我按下保存按钮时,这些行就会更新。到目前一切尚好。

当我按下add row按钮时,一个新的空行被插入。当我在那里输入一些数据并单击保存按钮时,我得到了错误消息:

Uncaught TypeError: Cannot read property 'extraparam' of undefined jquery.jqGrid.min.js:398

文档只说明了应该如何调用saveRow方法。但是,显然内联导航器会自动调用它。这太完美了。但是我想我仍然需要正确地设置一些参数,这样它就不会抛出错误并保存新添加的行。

希望一些jqGrid专家有一个很好的建议。谢谢。

代码语言:javascript
运行
复制
function createTable(data,colNames,colModel,caption ){
...

$(table).jqGrid({   data:data,
                        datatype: "local", 
                        height: 'auto', 
                        colNames:colNames,
                        pager:'#'+pagerid,
                        colModel:colModel, 
                        viewrecords: true, 
                        caption:caption,
                        editurl:'clientArray',
                        });


   var nav = $(table).jqGrid('navGrid','#'+pagerid,{edit:false,add:false,del:false});
   $(table).jqGrid('inlineNav','#'+pagerid);
   $(table).jqGrid('gridResize',{minWidth:350,maxWidth:800,minHeight:80, maxHeight:350});
   $('#gbox_'+tableid).draggable();  
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-19 14:44:06

The lines

代码语言:javascript
运行
复制
if(!o.addParams.addRowParams.extraparam) {
    o.addParams.addRowParams.extraparam = {};
}

使用o.addParams.addRowParams.extraparam,但addParams (请参阅here)的参数的默认值定义为addParams : {},而不是addParams : {addRowParams: {}}。因此,表达式o.addParams.addRowParams等于undefinedo.addParams.addRowParams.extraparamundefined.extraparam相同,这会产生空引用异常。

我在trirand上发布了the corresponding bug report,这个问题将在下一个版本的jqGrid中得到解决。

作为一种解决办法,您可以替换以下行

代码语言:javascript
运行
复制
$(table).jqGrid('inlineNav','#'+pagerid);

用这条线

代码语言:javascript
运行
复制
$(table).jqGrid('inlineNav','#'+pagerid, {addParams: {addRowParams: {}}});

代码中一些常见的附加说明:

  • 我强烈建议您始终使用gridview: true选项,这将在没有任何disadvantages
  • I的情况下提高代码的性能。建议您默认使用autoencode: true选项。因此,如果您试图显示像a < b这样的数据,您可能会遇到问题,因为<是HTML语言中的特殊字符。如果你想使用autoencode: true选项,输入数据将被解释为文本而不是HTML片段。
  • 我建议你从你的模型中移除index属性,如果你总是为indexname分配相同的值,properties.
  • I建议你为输入数据的每一项提供唯一的id属性。如果您从服务器获取数据,并且数据具有来自数据库的原生唯一id,则建议使用该值作为id属性的值。如果您在页面上使用多个jqGrids,并且没有提供唯一的HTML值,则会有重复的id,这是id错误。
  • ,我建议您使用jqGrid的idPrefix选项。如果你在页面上有两个网格,并且你没有为数据项填充(也不需要)任何id,那么你就有了重复的id (两个网格中的id=“1”,id="2“等等)。如果您要为一个网格定义idPrefix: "g1_",为另一个网格定义idPrefix: "g2_"选项,那么第一个网格的rowids将在第一个网格中为id="g1_1",id="g1_2“等,在第二个网格中为id="g2_1",id="g2_2”。即使您从服务器填充id,然后在一个表中提供唯一的id,但是来自数据库的两个表的id可以具有相同的id。因此,为每个网格使用不同的idPrefix选项将以非常简单的方式解决id重复的问题。
票数 2
EN

Stack Overflow用户

发布于 2013-05-11 02:19:51

我遇到了同样的问题,但我的jqgrid标记完全不同(也许是更新的版本?)

我可以使用内联来编辑和保存行,但添加行不会保存。我不确定问题出在哪里。

代码语言:javascript
运行
复制
<?php
ini_set("display_errors","1");
require_once 'jq-config.php';
// include the jqGrid Class
require_once ABSPATH."php/jqAutocomplete.php";
require_once ABSPATH."php/jqCalendar.php";
require_once ABSPATH."php/jqGrid.php";
// include the driver class
require_once ABSPATH."php/jqGridPdo.php";
// Connection to the server
$conn = new PDO(DB_DSN,DB_USER,DB_PASSWORD);
// Tell the db that we use utf-8
$conn->query("SET NAMES utf8");
// Create the jqGrid instance
$grid = new jqGridRender($conn);
// Write the SQL Query
$grid->SelectCommand = 'SELECT Serial, Type, Customer, Date, Notes FROM rmas';

$resize = <<<RESIZE
jQuery(window).resize(function(){
    gridId = "grid";

    gridParentWidth = $('#gbox_' + gridId).parent().width();
    $('#' + gridId).jqGrid('setGridWidth',gridParentWidth);
})
RESIZE;
$grid->setJSCode( $resize);

// set the ouput format to json
$grid->dataType = 'json';
$grid->table ="rmas";
$grid->setPrimaryKeyId("Serial");
// Let the grid create the model
$grid->setColModel();
// Set the url from where we obtain the data
$grid->setUrl('rmaform.php');
$grid->cacheCount = true;
//$grid->toolbarfilter = true;
$grid->setGridOptions(array(
    "caption"=>"RMAs",
    "rowNum"=>50,
    "sortname"=>"Serial",
    "hoverrows"=>true,
    "rowList"=>array(50,100,200),
    "height"=>600,
    "autowidth"=>true,
    "shrinkToFit"=>false
));


$grid->callGridMethod('#grid', 'bindKeys');
// Change some property of the field(s)
$grid->setColProperty("Serial", array("align"=>"center","width"=>40));
$grid->setColProperty("Type", array("align"=>"center","width"=>40));
$grid->setColProperty("Customer", array("align"=>"center","width"=>65));
$grid->setColProperty("Date", array("align"=>"center","width"=>40));
$grid->setColProperty("Notes", array("align"=>"left","width"=>500));
// navigator first should be enabled
$grid->navigator = true;
$grid->setNavOptions('navigator', array("add"=>false,"edit"=>false,"excel"=>true));
// and just enable the inline
$grid->inlineNav = true;
$buttonoptions = array("#pager", array(
        "caption"=>"Enable Cells", 
        "onClickButton"=>"js:function(){ jQuery('#grid').jqGrid('setGridParam',{cellEdit: true});}", "title"=> "Enable Excel like editing"
   )
);
$grid->callGridMethod("#grid", "navButtonAdd", $buttonoptions);
$buttonoptions = array("#pager", array(
        "caption"=>"Disable Cells", 
        "onClickButton"=>"js:function(){ jQuery('#grid').jqGrid('setGridParam',{cellEdit: false});}" , "title"=> "Disable Excel like editing"
   )
);
$grid->callGridMethod("#grid", "navButtonAdd", $buttonoptions);
$grid->renderGrid('#grid','#pager',true, null, null, true,true);
$conn = null;
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16096317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档