我有一个Yii2基本应用程序,它包含一个包含kartik GridView的 index.php 视图。有一个操作列,其中包含view
按钮,如果点击该页面,会将页面重定向到 view.php 的视图。
如果点击查看按钮,页面将重定向到 view.php ,并根据ID显示数据,
对于上图中的示例,该表格在视图列中包含两个按钮。如果点击了第一个(顶部)按钮,它将在 id 列(表格左侧)的id
上显示数据,因此它将显示具有id = 1
的数据。
我已经成功创建了这个动作。
但我需要在模式框中显示数据。所以我使用yii\bootstrap\Modal
。我已成功在模式框中显示数据。对于首次点击,它会弹出包含基于id
的数据的模式框,但对于下一个点击按钮,它还会显示基于id
的数据第一次点击按钮。
上图中的示例:
我第一次点击第二行(id = 2
)中的按钮,然后弹出包含id=2
数据的模式框,然后点击第一行(id = 1
),它还会弹出包含id = 2
数据的 modalbox 。
<?php
use yii\helpers\Html;
use kartik\grid\GridView;
use yii\widgets\Pjax;
use yii\helpers\Url;
use yii\bootstrap\Modal;
<div class="students-index">
<?=
GridView::widget([
'dataProvider' => $dataProvider,
'tableOptions' => ['class' => 'table table-hover'],
'columns' => [
[
'label' => 'id',
'value' => function($data) {
return $data->id;
}
],
[
'label' => 'Name',
'value' => function($data) {
return $data->name;
}
],
[
'label' => 'Birthdate',
'value' => function($data) {
return $data->Birthdate;
}
],
[
'label' => 'Sex',
'value' => function($data) {
return $data->Sex;
}
],
[
'class' => 'yii\grid\ActionColumn',
'header' => 'View',
'template' => '{view}',
'buttons' => [
'view' => function ($url, $model) {
$icon = '<span class="glyphicon glyphicon-eye-open"></span>';
return Html::a($icon, $url, [
'title' => Yii::t('app', 'View'),
'data-toggle' => "modal",
'data-target' => "#myModal",
]);
},
],
'urlCreator' => function ($action, $model, $key, $index) {
if ($action === 'view') {
$url = Url::toRoute(['/school/students/view', 'id' => $model->faktur_out_id], ['data-method' => 'post',]);
return $url;
}
}
]
],
]);
?>
</div>
<?php
Modal::begin([
'id' => 'myModal',
]);
Pjax::begin([
'id'=>'pjax-modal','timeout'=>false,
'enablePushState'=>false,
'enableReplaceState'=>false,
]);
Pjax::end();
Modal::end();
?>
<?php
$this->registerJs("
$('#myModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget)
var href = button.attr('href')
$.pjax.reload('#pjax-modal', {
'url' => href,
});
"); ?>
但实际上我还没有理解$this->registerJs("......")
。
也许任何人都可以用简单的语言解释它。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
$this->registerJs(" ");
只是Yii框架中的一个函数,它允许您在" "
之间编写javascript。
试试这个:
<?php
Modal::begin([
'id' => 'myModal',
]);
Pjax::begin([
'id'=>'myModal','timeout'=>false,
'enablePushState'=>false,
'enableReplaceState'=>false,
]);
Pjax::end();
Modal::end();
?>
<?php
$this->registerJs("
$('#myModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget)
var href = button.attr('href')
$.pjax.reload('#myModal', {
'url' => href,
});
"); ?>