我的 CGridView 按下有一个 CButtonColumn,它调用我的 JS 例程。JS 例程进行 Ajax 调用并删除一条记录。我需要将记录的主键传递给 JS 函数以删除预期的记录。我咨询过这个链接,并能够使用我的自定义按钮调用附加 JS,并通过硬编码 PK 值对其进行测试。在同一链接中提到的一种方法是访问网格第一列中的文本很有用(请参阅下面给出的使用 jQuery 代码的 myBtn 列代码)。使用这种方法,如果我在网格中显示 PK 列,那么我的问题就解决了,但向用户显示 PK 值绝对不是一种选择。我什至尝试通过使用 display:none 设置 htmlOPtions 来隐藏该列,但这让我的列标题仍然悬在顶部,看起来非常破旧。
以下是我的 JS(请原谅我的格式不正确,我尝试了很多但无法将其放入代码片段标签中,stackoverflow 可以处理 :)
function DeleteRec(Rec_id) {
alert(Rec_id);
//var Rec_id=27;
var data=$("#subject-form").serialize();
$.ajax({
type: 'POST',
url: '<?php echo Yii::app()->createAbsoluteUrl("upm/subject/deleteRec/id"); ?>'+'/'+Rec_id,
data:data,
success:function(data){
var myObject = eval('(' + data + ')');
alert(myObject.recDelete);
},
error: function(data) { // if error occured
var myObject = eval('(' + data + ')');
alert("Error occured.please try again"+myObject);
var myObject = eval('(' + data + ')');
var myJSONText = JSON.stringify(myObject);
},
dataType:'html'
});
}
以下是我的 CGridView 代码:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $PatHistoryGrid,
'id' => 'PatGrid',
'enableSorting' => false,
'enablePagination' => false,
'columns' => array(
'id' => array(
'name' => '',
'value' => '$data->id',
'htmlOptions' => array('style' => 'display:none;',)
),
'Pat' => array(
'name' => 'Pat Name',
'value' => '$data->pat->pat_val',
'htmlOptions' => array('width' => '240'),
),
'PatDate' => array(
'name' => 'Date',
'value' => '$data->pat_date',
'htmlOptions' => array('width' => '80', 'align' => 'middle')
),
'PatNotes' => array(
'name' => 'Pat Notes',
'value' => '$data->pat_notes',
'htmlOptions' => array('width' => '480', 'align' => 'middle')
),
'PatPreNotes' => array(
'name' => 'Pat Pre Notes',
'value' => '$data->pat_pre_notes',
'htmlOptions' => array('width' => '480', 'align' => 'middle')
),
'Flag' => array(
'type' => 'raw',
'name' => 'Flag',
'value' => '$data->flag',
'htmlOptions' => array('width' => '50')
),
array(
'class' => 'CButtonColumn',
'template' => '{update} {delete} {myBtn}',
'buttons' => array(
'myBtn' => array(
'click' => 'function(){
DeleteRec($(this).parent().parent().children(":first-child").text());
}',
),
),
),
),
'htmlOptions' => array(
'style' => 'margin-top:-40px;'
),
));
有没有办法添加 CGridColumn 但不显示,就像表单中的隐藏变量一样?如果这是可能的,那么我将能够解决这个问题。任何其他想法都是最受欢迎的。