Как обновить виджет с помощью pjax в модальном окне в yii2

У меня есть два ActiveForms в модальном окне и после отправки первой формы, мне нужно обновить вторую и остаться в модальном.

модальный

Как я понимаю, 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 работает правильно, а модальное не закрывается.

5

Решение

Обошлись без $ .pjax, только добавили

 $("#risks-solutions_order-sortable").append('<li data-id="'+data.id+'" data-key="'+data.id+'" draggable="true">'+data.solution+'</li>');
$("ul[id$='sortable'").trigger('sortupdate');
$('#risks-solutions_order-sortable').sortable( "refreshPositions" );

в аяксе успех и все ок! 🙂

2

Другие решения

Возможно, увеличение / отключение таймаута может помочь решить эту проблему.

$.pjax.reload('#solutionItems', {timeout : false});

Более подробную информацию вы можете найти здесь: yii2 как использовать pjax, когда гиперссылка не в pjax

0