esi*_*iaz 9 gridview dialog modal-dialog yii2
我想在每行上单击视图或更新按钮时在我的gridview上实现Yii2模式对话框.
任何人都可以建议如何实施它?
根据arogachev的建议:这是我的代码的更新
<?php
//var_dump($dataProvider);
$gridColumns = [
[
'format' => 'html',
'attribute' => 'avatar',
'label'=>'Image',
'headerOptions' => ['width' => '80%',],
],
[ 'class' => 'yii\grid\ActionColumn',
'template' => '{view} {delete}',
'headerOptions' => ['width' => '20%', 'class' => 'activity-view-link',],
'contentOptions' => ['class' => 'padding-left-5px'],
'buttons' => [
'view' => function ($url, $model, $key) {
return Html::a('<span class="glyphicon glyphicon-eye-open"></span>','#', [
'id' => 'activity-view-link',
'title' => Yii::t('yii', 'View'),
'data-toggle' => 'modal',
'data-target' => '#activity-modal',
'data-id' => $key,
'data-pjax' => '0',
]);
},
],
],
];
?>
<?php
Pjax::begin();
echo \kartik\grid\GridView::widget([
'dataProvider' => $dataProvider,
'columns'=>$gridColumns,
'summary'=>false,
'responsive'=>true,
'hover'=>true
]);
Pjax::end();
?>
<?php $this->registerJs(
"$('.activity-view-link').click(function() {
$.get(
'imgview',
{
id: $(this).closest('tr').data('key')
},
function (data) {
$('.modal-body').html(data);
$('#activity-modal').modal();
}
);
});
"
); ?>
<?php
?>
<?php Modal::begin([
'id' => 'activity-modal',
'header' => '<h4 class="modal-title">View Image</h4>',
'footer' => '<a href="#" class="btn btn-primary" data-dismiss="modal">Close</a>',
]); ?>
<div class="well">
</div>
<?php Modal::end(); ?>
Run Code Online (Sandbox Code Playgroud)
aro*_*hev 13
首先,您应该将类添加到视图链接,而不是id,因为有多个元素:
选项变更:
'class' => 'activity-view-link',
Run Code Online (Sandbox Code Playgroud)
在JS中:
$('.activity-view-link').click(function() {
Run Code Online (Sandbox Code Playgroud)
您可以从相应的父级中提取元素ID tr.它存储在data-key属性中.
$('.activity-view-link').click(function() {
var elementId = $(this).closest('tr').data('key');
}
Run Code Online (Sandbox Code Playgroud)
请注意,在复合主键的情况下,它将是对象,而不是字符串/数字.
获得id后,使用AJAX加载模型并将内容插入到模态体中.
控制器中相关方法的示例:
public function actionView($id)
{
$model = YourModel::findOne($id);
if (!$model) {
// Handle the case when model with given id does not exist
}
return $this->renderAjax('view', ['id' => $model->id];
}
Run Code Online (Sandbox Code Playgroud)
AJAX调用示例:
$(".activity-view-link").click(function() {
$.get(
.../view // Add missing part of link here
{
id: $(this).closest('tr').data('key')
},
function (data) {
$('.modal-body').html(data);
$('#activity-modal').modal();
}
);
});
Run Code Online (Sandbox Code Playgroud)