6

モーダル ウィンドウに 2 つの ActiveForms があり、最初のフォームを送信した後、2 つ目のフォームを更新してモーダルのままにする必要があります。

モーダル

私が理解しているように、pjaxはそれを処理できますが、適切に機能させることはできません。

_form.php には、更新する必要があるウィジェットを備えた ActiveForm があります。

<?php $form = ActiveForm::begin([
    'id'=>'form',
    'enableAjaxValidation'=>true,
]); ?>
<?= Html::activeHiddenInput($riskModel, 'id', ['value' => $riskModel->id]) ?>

<?php Pjax::begin([
    'id' => 'solutionItems',
]) ?>
//need to update this widget
    <?= $form->field($riskModel, 'solutions_order')->widget(SortableInput::classname(), [
        'items' => $riskModel->getSolutionList(),
        'hideInput' => false,
        'options' => ['class'=>'form-control', 'readonly'=>false]
    ]); ?>
<?php Pjax::end() ?>

<div class="form-group">
    <?= Html::submitButton($riskModel->isNewRecord ? 'Create' : 'Update', ['class' => $riskModel->isNewRecord ? 'btn btn-success' : 'btn btn-primary', 'onclick' => 'return isConnected()']) ?>
</div>

<?php ActiveForm::end(); ?>

そして、新しいソリューションが作成された場合に成功を返す Ajax リクエストがあります。

$.ajax({
    url: form.attr('action'),
    type: 'post',
    data: form.serialize(),
    success: function (data) {
        if (data && data.result == 1) {
            $.pjax.reload({container:'#solutionItems'});
        }
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        $("#error").html("Kļūda! Neizdevās pievienot ierakstu.").fadeIn('highlight','', 2000, callbackError());
        $("#solutions-solution").val("");
    }
});

しかし

$.pjax.reload({container:'#solutionItems'});

モーダルを閉じます。戻り値を div に入れると、ajax が正しく動作し、モーダルが閉じません。

4

2 に答える 2