この記事では主にYii2のモーダルポップアップウィンドウとgridviewを組み合わせて使う方法について紹介していますので、必要な方は参考にしてください。
前回の記事で使い方を紹介しました。 Yii2 のモーダル ポップアップ ウィンドウ (基本的な使用法) を例として作成します。
実際の開発では、一覧ページのデータを変更するためにモーダルを使用する場面がよくありますが、一般的なループ表示であれば、モーダルの基本的な使い方を見ればほとんどの人が操作できると思います。しかし、gridview と組み合わせると、これに耐えられなくなる人もいると思われます。この問題を解決する方法を見てみましょう。
1. グリッドビュー操作に [更新] ボタンを追加し、データ切り替えのデータターゲット クラスとデータ ID の値を指定します。 ##[
'class' => 'yii\grid\ActionColumn',
'template' => '{update}',
'buttons' => [
'update' => function ($url, $model, $key) {
return Html::a('更新', '#', [
'data-toggle' => 'modal',
'data-target' => '#update-modal',
'class' => 'data-update',
'data-id' => $key,
]);
},
],
],
2. 更新用のモーダルを追加します
##<?php
use yii\bootstrap\Modal;
// 更新操作
Modal::begin([
'id' => 'update-modal',
'header' => '<h4 class="modal-title">更新</h4>',
'footer' => '<a href="#" class="btn btn-primary" data-dismiss="modal">Close</a>',
]);
$requestUpdateUrl = Url::toRoute('update');
$updateJs = <<<JS
$('.data-update').on('click', function () {
$.get('{$requestUpdateUrl}', { id: $(this).closest('tr').data('key') },
function (data) {
$('.modal-body').html(data);
}
);
});
JS;
$this->registerJs($updateJs); Modal::end(); ?>
public function actionUpdate($id) { $model = $this->findModel($id); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['index']); } else { return $this->renderAjax('update', [ 'model' => $model, ]); } }
プロセス全体は、前に説明したモーダルの基本的な使用法と何ら変わらないことがわかります。しかし、これで終わりではありません。解決が難しい次のような一般的な問題が発生する可能性があります。
yii2 検索ボックスが検索できないのはなぜですか。 ?
yii2 1 つのページに複数のモーダルがあるページが 1 つのページを共有し、データが読み込まれるまで待機するのはなぜですか?
yii2 1 つのページに複数のモーダルがあります。例として、1 つのページを追加して上記のグリッドビューを更新すると、更新された select2 が無効になり無効になります。 これらの問題を 1 つずつ解決する方法を見てみましょう:
まず、モーダルの使用を開始するときに、options オプションの tabindex を指定するだけです。以下を参照してください:
Modal::begin([ // ...... 'options' => [ 'tabindex' => false ], ]);
2 番目と 3 番目の問題は、単一ページ内で複数のモーダルを使用することによって発生します。 , リストの[作成]ボタンとグリッドビューの[更新]ボタンの両方でモーダルを使用します。 Yii2 のモーダルポップアップウィンドウの使い方(基本的な使い方)とこの記事によると、最初の問題は明らかに
$('.modal-body').html(data);
によって引き起こされます。複数のモーダル 初めてモーダルを使用すると、すべてのモーダルの本体に値が割り当てられるため、後で他のモーダルを使用するときに、データが要求される前に同じコンテンツが表示されます。この問題を解決するには、各非同期リクエストの後にそれぞれのモーダル本体に個別の値を割り当てるだけです。コードは次のように参照できます。 ##最後の質問を参照してください。select2 を使用したことがある学生は注意してください。 ! !
このトピックで紹介した例のように、フォームに select2 が含まれている場合、[作成] 操作中のみ select2 フィールドが通常になり、[作成] 操作中は select2 フィールドが「非表示」になります。 「アップデート」操作です!
これは実際には、同じページ上の同じ select2 に対応する ID が原因で発生します。この問題を解決するには、データの各非同期リクエストの前に、ページ上の既存のフォーム項目をすべて削除するだけです。具体的な実装を見てください:
$('#create').on('click', function () { $.get('url', {}, function (data) { $('#create-modal').find('.modal-body').html(data); // $('.modal-body').html(data); } ); }); $('.data-update').on('click', function () { $.get('{$requestUpdateUrl}', { id: $(this).closest('tr').data('key') }, function (data) { $('#update-modal').find('.modal-body').html(data); // $('.modal-body').html(data); } ); });
上記はこの記事の全内容であり、その他の関連コンテンツについては、皆様の学習に役立つことを願っています。 PHP 中国語 Web サイトにご注意ください。
関連する推奨事項:
配列とオブジェクトに基づく Yii のモデルクエリについてYii と CKEditor は画像アップロード機能を実装します
Yii2 で複数のフィールドを同時に検索する方法##
以上がyii2 でモーダルポップアップウィンドウをグリッドビューと組み合わせて使用するコードについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。