在GridView,Yii2中,Bootstrap Modal不能与Pjax一起使用

时间:2016-01-06 05:38:17

标签: jquery yii2 bootstrap-modal yii2-advanced-app

我是Yii的新手,我发现了类似的问题,但仍无法使其适用于我的案例。我在extendedMoment页面上有一个GridView,每行有index个按钮。我在view中显示了这些观点:

bootstrap Modal

模态火与:

 <?php
        Modal::begin([
            'header' => Yii::t('app','Feedback'),
            'id' => 'feedbackModalId',
            'class' =>'modal',
            'size' => 'modal-md',
        ]);       
        echo "<div class='modalContent'></div>";

        Modal::end();

        ?>
<?php Pjax::begin(); 

echo GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
        //...

        ['class' => 'yii\grid\ActionColumn', 'template'=>'{custom_view}{custom_update}',
            'buttons' => 
            [
                'custom_view' => function ($url, $model) {
                   return
                           Html::a(Yii::t('app','View'), ['view', 'id'=>$model->id],['class' => 'btn-xs btn-primary modalButton'] );

                },     
               'custom_update' => function ($url, $model) {                
                            return                          
                                Html::a(Yii::t('app','Update'), ['update', 'id'=>$model->id],['class' => 'btn-xs btn-primary modalButton'] );

                    },  

            ]
        ]
    ],
]); 
Pjax::end();?>

在我为ajax搜索和分页添加 $(".modalButton").click(function(){ $(".modal").modal("show") .find(".modalContent") .load($(this).attr('href')); return false; }); 之前,它工作正常,但现在当我点击Pjax按钮时,我看到在页面上呈现的视图而不是弹出窗口。 我找到了一个解决方案,它将view添加到表单属性中,但在我的情况下,我没有data-pjax = 1表单。

我很感激任何建议。

1 个答案:

答案 0 :(得分:2)

使用以下代码代替Pjax的js代码

模态代码

<?php
    yii\bootstrap\Modal::begin([
        'header' => 'demo Test',
        'id'=>'feedbackModalId',
    ]);
    yii\bootstrap\Modal::end();
?>

<?php  //js code: 

$this->registerJs(
"$(document).on('ready pjax:success', function() {
        $('.modalButton').click(function(e){
           e.preventDefault(); //for prevent default behavior of <a> tag.
           var tagname = $(this)[0].tagName;      
           $('#feedbackModalId').modal('show')
                      .find('.modalContent')
                      .load($(this).attr('href'));  
       });
    });
")
?>

<?php Pjax::begin(); 

echo GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
        //...

        ['class' => 'yii\grid\ActionColumn', 'template'=>'{custom_view}',
            'buttons' => 
            [
                'custom_view' => function ($url, $model) {
                   return Html::a(Yii::t('app','View'), ['view', 'id'=>$model->id],['class' => 'btn-xs btn-primary modalButton'] );

                },                    

            ]
        ]
    ],
]); 
Pjax::end();?>

我希望它会帮助你。