Yii2:在Gridview中的可点击行中显示模式

时间:2018-08-28 08:01:01

标签: gridview yii2 modal-dialog

我想在Gridview中单击一行后显示模式,但是模式内容不会显示。

我的代码缺少什么或有什么问题?

在main.php中:

    <?php
    Modal::begin([
        'header'=>'<h4>Update '. $this->title .'</h4>',
        'id'=>'update-modal',
        'size'=>'modal-md'
    ]);

echo "<div id='updateModalContent'></div>";

Modal::end();
?>

在index.php中:

    <?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        [
            'attribute'=>'name',
            'format'=>'raw',
            'value'=>function ($model) {
                    return Html::a($model->name, ['/unit/unit/update', 'id'=>$model->id], ['class' => 'update-modal-link',
                                                'data-toggle'=>"modal",
                                                'data-target'=>"#update-modal",
                                            ]);
             }
        ],
    ],
]); ?>

在main.js中:

    $(function () { 
        $('.update-modal-link').click(function () {
            $('#update-modal')
                .modal('show')
                .find('#updateModalContent')
                .load($(this).attr('value'));
        });
    });

1 个答案:

答案 0 :(得分:1)

您应该使用javascript或默认的data-toggledata-target属性,您正试图通过2个源来加载它,而我怀疑您所面临的问题是它加载了模式并消失了即刻。

如果正确,请从GridView列的锚链接中删除属性,并将其更新为以下内容。

[
    'attribute' => 'name',
    'format' => 'raw',
    'value' => function ($model) {
        return Html::a($model->name, ['/unit/unit/update', 'id' => $model->id], ['class' => 'update-modal-link']);
    }
],

然后,您尝试为锚点分配value属性,该属性无效。您需要将锚点的href属性作为目标,以获取相对网址并加载模式内容。

将您的JavaScript代码更改为以下

$(function () { 
    $('.update-modal-link').click(function (e) {
        e.preventDefault();
        $('#update-modal')
            .modal('show')
            .find('#updateModalContent')
            .load($(this).attr('href'));
    });
});

希望这会有所帮助。