Bootstrap Modal 在 GridView、Yii2 中不支持 Pjax
Bootstrap Modal not working with Pjax in GridView, Yii2
我是 Yii 的新手,我发现了类似的问题,但仍然无法解决我的问题。我在 index
页面上有一个 GridView,每行都有 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();?>
模式触发:
$(".modalButton").click(function(){
$(".modal").modal("show")
.find(".modalContent")
.load($(this).attr('href'));
return false;
});
在我为 ajax 搜索和分页添加 Pjax
之前它工作正常,但现在当我单击 view
按钮时,我看到页面上呈现的视图而不是弹出窗口。
我找到了一个将 data-pjax = 1
添加到表单属性的解决方案,但就我而言,我没有 post
表单。
如有任何建议,我将不胜感激。
使用以下代码代替 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();?>
希望对你有帮助。
我是 Yii 的新手,我发现了类似的问题,但仍然无法解决我的问题。我在 index
页面上有一个 GridView,每行都有 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();?>
模式触发:
$(".modalButton").click(function(){
$(".modal").modal("show")
.find(".modalContent")
.load($(this).attr('href'));
return false;
});
在我为 ajax 搜索和分页添加 Pjax
之前它工作正常,但现在当我单击 view
按钮时,我看到页面上呈现的视图而不是弹出窗口。
我找到了一个将 data-pjax = 1
添加到表单属性的解决方案,但就我而言,我没有 post
表单。
如有任何建议,我将不胜感激。
使用以下代码代替 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();?>
希望对你有帮助。