How to update widget with pjax in modal window in yii2
Asked Answered
P

2

6

I have two ActiveForms in a modal window and after submitting first form, I need to update second one and stay in modal.

modal

As I understand pjax can handle that, but can't get it to work properly.

In _form.php I have ActiveForm with widget which should be updated:

<?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(); ?>

And then I have Ajax request which returns success if new solution is created:

$.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("");
    }
});

But

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

closes the modal. If I put the returned value in a div, then ajax works properly and the modal is not closing.

Proportionable answered 23/2, 2015 at 13:1 Comment(0)
P
2

Managed without $.pjax, just added this

 $("#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" );

in ajax success and everything is ok! :)

Proportionable answered 23/2, 2015 at 14:49 Comment(2)
do you know how to do this with pjax by now?Openair
@Openair no, but I din't explore more pjax after I managed via jquery.Knapweed
V
0

Perhaps increasing/disabling timeout may help to solve this problem.

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

More details you can find here: yii2 how to use pjax when hyperlink is not in pjax

Verbose answered 26/8, 2016 at 16:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.