雅\kartik\grid\CheckboxColumn
yii2 \kartik\grid\CheckboxColumn
我在我的 yii2 网格中添加了一个复选框列,并创建了一个可以删除所有选定值的按钮。但是,在我的操作中,我已经使删除图标仅显示依赖项成为可能,如下所示。
'delete' => 函数 ($model, $key, $index) {
/* add public function in model i,e GetstopDelete*/
if(empty($model->stopDelete))
return true;
else
return $model->stopDelete == 1 ? false : true;
}
},
但是,如果您无法删除该行,我不希望复选框可用,那么如何根据相同的参数隐藏复选框的单元格?
我正在使用
http://demos.krajee.com/grid#checkbox-column
和
http://www.yiiframework.com/doc-2.0/yii-grid-checkboxcolumn.html
您可以执行一些技巧,例如使用普通列并自己绘制复选框 + 事件。
它看起来像:
[
'header'=>Html::checkbox('selection_all', false, ['class'=>'select-on-check-all', 'value'=>1, 'onclick'=>'$(".kv-row-checkbox").prop("checked", $(this).is(":checked"));']),
'contentOptions'=>['class'=>'kv-row-select'],
'content'=>function($model, $key){
return Html::checkbox('selection[]', false, ['class'=>'kv-row-checkbox', 'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("danger");', 'disabled'=> isset($model->stopDelete)&&!($model->stopDelete===1)]);
},
'hAlign'=>'center',
'vAlign'=>'middle',
'hiddenFromExport'=>true,
'mergeHeader'=>true,
],
这样您就可以更好地控制行为。
我的工作代码基于 Tai Kitron 的回答。
添加了下面的网格列
'header'=>Html::checkbox('selection_all', false, ['class'=>'select-on-check-all', 'value'=>1,
'onclick'=>'
$(".kv-row-checkbox").prop("checked", $(this).is(":checked"));
if($(".kv-row-checkbox").prop("checked") === true) $(".delete_ready").attr("class","delete_ready warning");
if($(".kv-row-checkbox").prop("checked") === false) $(".delete_ready").attr("class","delete_ready");
']),
'contentOptions'=>['class'=>'kv-row-select'],
'content'=>function($model, $key){
if(isset($model->stopDelete)&&($model->stopDelete!==1))
return Html::checkbox('id[]', false, ['class'=>'kv-row-checkbox ',
'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("warning");', 'disabled'=> isset($model->stopDelete)&&($model->stopDelete===1)]);
else
return '';
//return Html::checkbox('selection[]', false, ['class'=>'kv-row-checkbox', 'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("danger");', 'disabled'=> isset($model->stopDelete)&&!($model->stopDelete===1)]);
},
'hAlign'=>'center',
'vAlign'=>'middle',
'hiddenFromExport'=>true,
'mergeHeader'=>true,
'width'=>'50px'
],
添加了以下行选项
'row_options'=>function($model){
if(empty($model->stopDelete)){
return ['class' => 'delete_ready'];
}
使用了以下 javascript
//删除选中的行
$(文档).on('click', '#deleteSelected', function(){
var table = $('#deleteSelected').attr('value');
var keys = new Array();//[];//$('.deletSelectedItem:checked').val();
var path = 'global/deleteselected';
var current_page = location.pathname.substring(1);//window.location;
var c = 0;
$("input[name='id[]']:checked").each( function () {
keys[c] = $(this).val();
c++;
});
if( current_page.indexOf("index") >= 0){
path = '../global/deleteselected';
}
if(keys.length ==0){
krajeeDialog.alert("No Recorlds Selected")
}
else {
if(keys.length ==1)
var s = '';
else
var s ='s';
krajeeDialog.confirm("Are you sure you want to delete the selected "+keys.length+" recorld"+s+"?", function (result) {
if (result) {
$.post({
url: path,
data: {keylist: keys, table:table},
success: function (data) {
if( current_page.indexOf("index") >= 0)
$.pjax.reload({container: "#"+table});
else
$.pjax.reload({container: "#"+table, url: table});
}, error: function (xhr, status, error) {
alert(status + error);// check status && error
},
});
}
});
}
});
工作正常。感谢您的帮助 Tai Kitron
这似乎是一个有点老的问题,但这是我的方法:
[
'class' => '\kartik\grid\CheckboxColumn',
'checkboxOptions' => function($model) {
if(!$model->status){
return ['disabled' => true];
}else{
return [];
}
},
],
这甚至可以使用默认的 yii CheckboxColumn
我在我的 yii2 网格中添加了一个复选框列,并创建了一个可以删除所有选定值的按钮。但是,在我的操作中,我已经使删除图标仅显示依赖项成为可能,如下所示。
'delete' => 函数 ($model, $key, $index) {
/* add public function in model i,e GetstopDelete*/
if(empty($model->stopDelete))
return true;
else
return $model->stopDelete == 1 ? false : true;
}
},
但是,如果您无法删除该行,我不希望复选框可用,那么如何根据相同的参数隐藏复选框的单元格?
我正在使用 http://demos.krajee.com/grid#checkbox-column 和 http://www.yiiframework.com/doc-2.0/yii-grid-checkboxcolumn.html
您可以执行一些技巧,例如使用普通列并自己绘制复选框 + 事件。 它看起来像:
[
'header'=>Html::checkbox('selection_all', false, ['class'=>'select-on-check-all', 'value'=>1, 'onclick'=>'$(".kv-row-checkbox").prop("checked", $(this).is(":checked"));']),
'contentOptions'=>['class'=>'kv-row-select'],
'content'=>function($model, $key){
return Html::checkbox('selection[]', false, ['class'=>'kv-row-checkbox', 'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("danger");', 'disabled'=> isset($model->stopDelete)&&!($model->stopDelete===1)]);
},
'hAlign'=>'center',
'vAlign'=>'middle',
'hiddenFromExport'=>true,
'mergeHeader'=>true,
],
这样您就可以更好地控制行为。
我的工作代码基于 Tai Kitron 的回答。
添加了下面的网格列
'header'=>Html::checkbox('selection_all', false, ['class'=>'select-on-check-all', 'value'=>1,
'onclick'=>'
$(".kv-row-checkbox").prop("checked", $(this).is(":checked"));
if($(".kv-row-checkbox").prop("checked") === true) $(".delete_ready").attr("class","delete_ready warning");
if($(".kv-row-checkbox").prop("checked") === false) $(".delete_ready").attr("class","delete_ready");
']),
'contentOptions'=>['class'=>'kv-row-select'],
'content'=>function($model, $key){
if(isset($model->stopDelete)&&($model->stopDelete!==1))
return Html::checkbox('id[]', false, ['class'=>'kv-row-checkbox ',
'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("warning");', 'disabled'=> isset($model->stopDelete)&&($model->stopDelete===1)]);
else
return '';
//return Html::checkbox('selection[]', false, ['class'=>'kv-row-checkbox', 'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("danger");', 'disabled'=> isset($model->stopDelete)&&!($model->stopDelete===1)]);
},
'hAlign'=>'center',
'vAlign'=>'middle',
'hiddenFromExport'=>true,
'mergeHeader'=>true,
'width'=>'50px'
],
添加了以下行选项
'row_options'=>function($model){
if(empty($model->stopDelete)){
return ['class' => 'delete_ready'];
}
使用了以下 javascript //删除选中的行 $(文档).on('click', '#deleteSelected', function(){
var table = $('#deleteSelected').attr('value');
var keys = new Array();//[];//$('.deletSelectedItem:checked').val();
var path = 'global/deleteselected';
var current_page = location.pathname.substring(1);//window.location;
var c = 0;
$("input[name='id[]']:checked").each( function () {
keys[c] = $(this).val();
c++;
});
if( current_page.indexOf("index") >= 0){
path = '../global/deleteselected';
}
if(keys.length ==0){
krajeeDialog.alert("No Recorlds Selected")
}
else {
if(keys.length ==1)
var s = '';
else
var s ='s';
krajeeDialog.confirm("Are you sure you want to delete the selected "+keys.length+" recorld"+s+"?", function (result) {
if (result) {
$.post({
url: path,
data: {keylist: keys, table:table},
success: function (data) {
if( current_page.indexOf("index") >= 0)
$.pjax.reload({container: "#"+table});
else
$.pjax.reload({container: "#"+table, url: table});
}, error: function (xhr, status, error) {
alert(status + error);// check status && error
},
});
}
});
}
});
工作正常。感谢您的帮助 Tai Kitron
这似乎是一个有点老的问题,但这是我的方法:
[
'class' => '\kartik\grid\CheckboxColumn',
'checkboxOptions' => function($model) {
if(!$model->status){
return ['disabled' => true];
}else{
return [];
}
},
],
这甚至可以使用默认的 yii CheckboxColumn