yii2_php の例で、モーダル ポップアップ ウィンドウのサンプル コードを Gridview と組み合わせて使用​​する方法の詳細な説明

WBOY
リリース: 2016-06-16 08:40:56
オリジナル
1015 人が閲覧しました

前回の記事では、作成を例にYii2のモーダルポップアップウィンドウの使い方(基本的な使い方)を紹介しました。

実際の開発では、一覧ページのデータを変更するためにモーダルを使用する場面がよくありますが、一般的なループ表示であれば、モーダルの基本的な使い方を見た上で操作できる人が多いと思います。 GridView と組み合わせることで操作できるようになる人もいると思われます。この問題を解決する方法を見てみましょう。

1. グリッドビューオペレーションに[更新]ボタンを追加し、data-toggleのデータ対象クラスとdata-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. 更新用のモーダルを追加します

<&#63;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();
&#63;>
ログイン後にコピー

3. 更新メソッドを変更します

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,
]);
}
}
ログイン後にコピー

プロセス全体は、前に説明したモーダルの基本的な使用法と何ら変わらないことがわかります。しかし、これで終わるわけではありません。ほとんどの人は、解決が難しい次のような一般的な問題に遭遇する可能性があると思います。

select2 が yii2 モーダルで使用されているのですが、検索ボックスが検索できないのはなぜですか?

yii2 1 つのページに複数のモーダルがあるのですが、なぜ複数のページが 1 つのページを共有し、データが読み込まれるまで待機するのですか?

yii2 単一のページに複数のモーダルがあります。例として、単一のページを追加して上記のグリッドビューを更新すると、更新された select2 が無効になり無効になります。

これらの問題を 1 つずつ解決する方法を見てみましょう:

まず最初の質問は、モーダルの使用開始時に options オプションの tabindex を false に指定するだけでよいということです。参考は次のとおりです。

Modal::begin([
// ......
'options' => [
'tabindex' => false 
],
]);
ログイン後にコピー

2 番目と 3 番目の問題は、1 つのページで複数のモーダルを使用することによって発生します。この問題を説明するために、リストの [作成] ボタンとグリッドビューの [更新] ボタンの両方でモーダルを使用します。 Yii2 でのモーダルポップアップの使い方 (基本的な使い方) とこの記事によると、最初の問題は明らかに

です。
$('.modal-body').html(data);
ログイン後にコピー

複数のモーダルが原因で、初めてモーダルを使用した後、すべてのモーダルの本体に値が割り当てられるため、後で他のモーダルを使用したときに、データが要求される前に同じ内容が表示されます。この問題を解決するには、各非同期リクエストの後にそれぞれのモーダル本体に個別の値を割り当てるだけで済みます。コードは次のように参照できます。

$('#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);
} 
);
});
ログイン後にコピー
最後の質問を見てください。select2 を使用したことがある学生は注意してください。 ! !

このトピックで紹介した例のように、フォームにselect2が含まれていると、[作成]操作時のみselect2フィールドが正常になり、[更新]操作時はselect2フィールドが「非表示」になります。 ] 手術!

これは実際には、同じページ上の同じ select2 に対応する ID が原因で発生します。この問題を解決するには、データの各非同期リクエストの前に、ページ上の既存のフォーム項目をすべて削除するだけです。具体的な実装を参照してください:

$('#create').on('click', function () {
// 有效避免multiply modal select2的问题
// 移除异步加载过来的form表单
$('.document-nav-form').remove();
$.get('{$requestUrl}', {},
function (data) {
$('#create-modal').find('.modal-body').html(data);
} 
);
});
$('.data-update').on('click', function () {
// 有效避免multiply modal select2的问题
// 移除异步加载过来的form表单
$('.document-nav-form').remove();
$.get('{$requestUpdateUrl}', { id: $(this).closest('tr').data('key') },
function (data) {
$('#update-modal').find('.modal-body').html(data);
} 
);
});
ログイン後にコピー
上記は、エディターが紹介した yii2 の Gridview と組み合わせたモーダル ポップアップ ウィンドウの使用方法のサンプル コードの全体の説明です。ご質問があれば、お気軽にお問い合わせください。メッセージを送信すると、編集者が全員にすぐに返信します。また、スクリプト ハウスの Web サイトをサポートしていただきありがとうございます。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート