如何在Gridview视图和更新按钮上实现Yii2模态对话框?

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)