CJuiDialog не будет повторно открываться с CGridview внутри

У меня есть несколько ссылок, содержащих параметры, которые откроют диалоговое окно, заполненное вызовом ajax.

образец ссылки:

<a href="javascript:void(0)" id="attach_file_project_454" class="attach_timesheet_file" data-id="454" data-week-start="2017-08-18" data-week-end="2017-08-24">Attach File</a>

Вот триггер для модального окна:

$(".attach_timesheet_file").on("click", function(e) {
    e.preventDefault();
    var url = "<?=Yii::app()->createUrl('admin/timesheetNew/attachTimesheet')?>";
    var id = $(this).data("id");
    var weekStart = $(this).data("week-start");
    var weekEnd = $(this).data("week-end");
    $.ajax({
        type: 'POST',
        url:url,
        data: {
            id: id,
            week_start: weekStart,
            week_end: weekEnd
        },
        success: function(data) {
            var modal = $("#attachFileModal");
            try{
                modal.html(data);
            }
            catch(error)
            {
                console.log(error);
            }
            modal.dialog('open');
            return true;
        }
    })
});

Основное действие, вызываемое ajax:

public function actionAttachTimesheet(){
    $projectId = Yii::app()->request->getPost('id', null);
    $reportedWeekStart = Yii::app()->request->getPost('week_start', null);
    $reportedWeekEnd = Yii::app()->request->getPost('week_end', null);

    $this->renderPartial("_attachTimesheet", [
        'projectId' => $projectId,
        'reportedWeekStart' => $reportedWeekStart,
        'reportedWeekEnd' => $reportedWeekEnd,
        'dataProvider' => TimesheetAdditionalFile::additionalFilesDataProvider($projectId, $reportedWeekStart, $reportedWeekEnd)
    ], false, true);
}

И, наконец, виджет CGridView внутри диалога:

$this->widget('zii.widgets.grid.CGridView', [
    'id' => 'files-grid',
    'dataProvider' => $dataProvider,
    'columns' => [
        [
            'name' => 'filename',
            'header' => 'File Name',
            'value' => 'CHtml::link($data["filename"], Yii::app()->baseUrl . TimesheetNew::FILES_FOLDER . $data["filename"], ["class" => ($data["filetype"] == "pdf")?"fancybox_pdf":"fancybox_picture"])',
            'type'=>'raw',
            'headerHtmlOptions'=>array('style'=>'width: 250px'),
        ],
        [
            'class' => 'CButtonColumn',
            'template' => '{delete}',
            'buttons' => [
                'delete' => [
                    'label' => 'Delete',
                    'imageUrl' => null,
                    'url' => 'Yii::app()->createUrl("admin/timesheetNew/deleteFile", ["id" => $data["id"]])'
                ]
            ],
            'deleteConfirmation'=>'Are you sure you want to delete this file?',
        ]
    ]
]);

Я также использовал qq.FileUploader, а также fancybox внутри модального окна, но они, похоже, ни на что не влияют.

Когда я пытаюсь щелкнуть любую такую ​​ссылку "прикрепить файл", диалоговое окно открывается нормально, и все работает как задумано. Я вижу свою сетку и могу добавлять и удалять файлы. Однако, когда я закрываю диалоговое окно, оно не открывает ни эту ссылку, ни другие ссылки "прикрепить файл".

Ошибка, которую я получаю в консоли, это после повторного нажатия ссылки:

Uncaught TypeError: modal.dialog не является функцией

Я испытываю это только при использовании gridview, когда я комментирую этот код виджета, я могу свободно открывать и закрывать эти диалоги по своему желанию.

Любая помощь будет принята с благодарностью:)

1 ответ

Решение

Решение было довольно простым. Добавляя эти строки в верхнюю часть файла представления, диалоговые окна можно снова открывать и закрывать на неопределенное время.

Yii::app()->getClientScript()
    ->scriptMap = array(
    'jquery.js' => false,
    'jquery-ui.min.js' => false
);
Другие вопросы по тегам