我一直在尝试创建在窗体视图中单击按钮时触发的 yii \ jui \ Dialog 。 Dialog本身将使用 Yii 2.0 在其中包含 Gridview 小部件。
我已设法创建对话框并使用 Gridview 小部件填充它。我遇到的唯一问题是对话框中的 Gridview 无法正确过滤。过滤器过程很好,但每次我过滤 Gridview 时,Dialog模式也将被关闭。
我也尝试通过在Pjax小部件中封装gridview来使用Pjax。这次模态对话框不会被关闭。但它只能过滤1次。一旦 Gridview 被过滤,我们就不能再过滤它了。
下面是我的" _form" view :(我正在使用名为" cari"触发弹出对话框的按钮)
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'judul')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'isi')->textarea(['rows' => 6]) ?>
<?= $form->field($model, 'kategori_id', [
'addon' => ['append' =>
['content'=>
Html::button('x', ['class'=>'btn btn-default','name' => 'del_kat', 'id' => 'del_kat', 'onclick' => '$("#kat_id").val("");']) . PHP_EOL .
Html::button('Cari', ['class'=>'btn btn-primary','id' => 'modal_kat', 'onclick' => '$("#kategori_dialog").dialog("open"); return false;' ]),
'asButton' => true
]
]
])->textInput(['id'=> 'kat_id', 'readonly' => true]) ?>
这是我的 GridView 代码:
GridView::widget([
'dataProvider' => $kategoriModel->search(Yii::$app->request->queryParams),
'filterModel' => $kategoriModel,
'columns' => [
'kategori_id',
'nama',
[
'label' => 'test',
'format' => 'raw',
'value' => function ($data) {
return Html::button('+', ['class'=>'btn btn-default','id' => 'modal_kat', 'onclick' => '$("#kategori_dialog").dialog("close"); $("#kat_id").val("'.$data->kategori_id.'");' ]);
},
],
],
]);
这里是对话代码:
Dialog::begin([
'id' => 'kategori_dialog',
'clientOptions' => [
'modal' => true,
'autoOpen'=>false,
'title'=>'List Kategori',
'width'=>'auto',
],
]);
Pjax::begin(['id' => 'kategori-pjax', 'enablePushState'=>false]);
echo $kategoriGrid;
Pjax::end();
Dialog::end();
正如大家们所见,我试图使用Pjax,但我无法按预期工作(因为我只能过滤 Gridview 一次然后可以再次过滤)。我记得在Yii 1.1中做的很好(我正在使用CJuiDialog)。
所以我想知道我在 Yii 2.0 中是否遗漏了一些东西?我是Pjax的新手,所以我想我想念一些必须在Pjax小部件中设置的属性。
答案 0 :(得分:0)
就我而言,解决方法是使用Kartik的Gridview。我安装它并将Pjax属性设置为true。
use kartik\grid\GridView;
GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $model,
'columns' => $gridColumns,
'pjax' =>true,
]);
现在我可以在对话框中成功过滤网格。看起来Kartik在使用Pjax Container包装Grid时有更好的实现。