Prooksius писал(а): ↑2020.05.13, 20:54
Информации мало, но предположу, что при обновлении содержимого пиджака (Pjax) слетают скрипты, подключенные к элементам обновляемого блока. Надо видеть, конечно, весь код, чтобы сказать что-то определенное.
Возможно, нужно cодержимое пиджака выдавать не через rendrePartial, а через renderAjax
Окей понял, сейчас полее подробно.
Это то что передаётся контроллером, просто view файл. (лишнее убрал для читаемости)
Код: Выделить всё
<?php
Pjax::begin([
'id' => 'duration-modal',
'enablePushState' => false,
'enableReplaceState' => false,
]);
?>
<?php foreach ($durations as $duration): ?>
<div class="row list duration-list-item list-item">
<div class="col-md-2">
<a href="<?= Url::to([ '/pm/duration/main',
'task_id' => $task->id,
'duration_id' => $duration->id]) ?>">►</a>
</div>
</div>
<?php endforeach; ?>
<?php
$form = ActiveForm::begin([
'id' => 'duration-input-form',
'method' => 'POST',
'options' => ['data-pjax' => true],
'action' => Url::to(['/pm/duration/main', 'task_id' => $task->id, 'duration_id' => $durationModel->id]),
]); ?>
<div class="row">
<div class="col-md-2">
<?= $form->field($durationModel, 'days')->textInput() ?>
</div>
<div class="col-md-3">
<?= $form->field($durationModel, 'date')->input('date') ?>
</div>
<div class="col-md-3">
<?= $form->field($durationModel, 'schedule_type_id')->dropDownList($scheduleTypes) ?>
</div>
<div class="col-md-2">
<label for=""> </label>
<button type="reset"
class="btn gray_button no-margin">
<?= Yii::t('app', 'new') ?>
</button>
</div>
<div class="col-md-2">
<label for=""> </label>
<button type="submit"
class="btn gray_button no-margin">
<?= Yii::t('app', 'add') ?>
</button>
</div>
</div>
<div class="row">
<div class="col-md-6">
<?= $form->field($durationModel, 'milestones')->textarea(['rows' => 2]) ?>
</div>
<div class="col-md-6">
<?= $form->field($durationModel, 'deliverables')->textarea(['rows' => 2]) ?>
</div>
</div>
<?php ActiveForm::end(); ?>
<?php Pjax::end(); ?>
И на странице есть кнопка которая вызывает эту функцию js.
Код: Выделить всё
body.on('click', '.modal-window-open', function (e) {
e.preventDefault();
var data = $(this).data();
$('.modal').modal('hide');
modalWindow.find('.modal-body').empty();
modalWindow.find('.modal-body').html('<p class="text-center"><img src="/img/loading_small.gif"/></p>');
modalWindow.modal('show');
modalWindow.find('.modal-body').load(data.url);
});
И сам контроллер, который либо ищет PmDuration, либо создаёт новый.
Код: Выделить всё
public function actionMain($task_id, $duration_id = null)
{
$task = PmTask::findById($task_id);
$request = Yii::$app->request;
if (isset($duration_id)) {
$duration = PmDuration::findById($duration_id);
} else {
$duration = new PmDuration();
}
$duration->pm_task_id = $task_id;
if ($request->isPost && $duration->load($request->post())) {
$duration->save();
}
return $this->renderAjax('main', [
'task' => $task,
'durationId' => $duration_id
]);
}
При первом открытий модального окна всегда создаётся новая модель, и там уже есть список уже созданных моделей на которые можно нажать и он уже вызывает обратно
actionMain но уже с
$duration_id . И получается что модель должна искаться. Это все работает. Но проблема в том, что в форму данные не идут.