Загрузить диалог jQuery из Controller / View? - PullRequest
1 голос
/ 04 августа 2011

Я использую диалоговое окно jQuery для загрузки представления, которое используется для загрузки файлов в мое приложение. После просмотра файла и нажатия кнопки «Отправить» вызывается контроллер, который обрабатывает файл и передает его моей модели для вставки. Затем модель возвращается к контроллеру успеха (или нет) и загружает новое представление для успеха (или нет).

Я хотел бы, чтобы представление успешного (или нет) рендеринга находилось в том же диалоговом окне jQuery (или открывало новое) вместо вызова / загрузки всего представления.

Буду ли я вызывать / загружать (каким-либо образом) диалоговое окно jQuery из моего контроллера? Или я бы заставил мой контроллер вызывать новое представление, и, как только он загрузится, он будет отображать диалог, в основном отображая себя в диалоге? Надеюсь, это имеет смысл.

Спасибо.

** РЕДАКТИРОВАНИЕ: ДОБАВЛЕННЫЙ КОД НИЖЕ + КОММЕНТАРИИ - Спасибо! **

Мое начальное представление содержит следующую функцию jQuery, которая вызывается, когда пользователь нажимает на якорь («загрузить файл»):

$(document).ready(function(){
 function uploadImage(event) {
          id = $(this).data('id'); //id is an URL such as ('upload_form'/do_upload/5) it calls my controller (uploadimage), and passes a value (5) to a function (doupload)

          $("#dialog").load(id).dialog(); //loads the URL    
         return false;
    }

$('.imageBtn').live('click',uploadImage);     
});

Функция, вызываемая контроллером:

function do_upload()
    {
        $config['upload_path'] = './uploads/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '0';
        $config['max_width']  = '212';
        $config['max_height']  = '118';

        $this->load->library('upload', $config);    
        if ( ! $this->upload->do_upload())
        {
            $data['id'] = $this->input->post( 'iEventID', true );    
                        $data['error'] = $this->upload->display_errors();
            $this->load->view('admin/upload_form', $data); // If an error is found during file/img upload, then the code reloads the view that was previously loaded into my dialogue. This is where I need the same view to reload in the dialog and present the error message. This currently loads the view in its entirety in a browser window.
        }
        else
        {
            $upload_data = $this->upload->data(); 
            $filename = $upload_data['file_name'];    
            $this->event_model->addEventImage($filename);
            $this->load->view('admin/upload_success');  // If all is well, instead of loading the view in its entirety, I want to load the success into the dialog previously popped.
        }
    }

Ответы [ 3 ]

0 голосов
/ 04 августа 2011

используйте ajax для успешной отправки и получения текста: метод callback () для визуализации данных в диалоге

0 голосов
/ 04 августа 2011

var $ dialog;function showDialog (html, status, request) {$ dialog.dialog ('open');$ Dialog.html (HTML);вернуть ложь;}

$ (документ) .ready (function () {$ dialog = $ (''). Dialog ({autoOpen: false, модальный: true, заголовок: 'Export Dialog', кнопки: {'Ok': function () {jQuery (). download (' <% = submitURL%> ', $ data, function () {jQuery (' # wait '). hide (); $ dialog.dialog (' close ');}, 'post');}, 'Cancel': function () {jQuery (this) .dialog ('close');}}});

$ ('# popup'). click (function () {jQuery.ajax ({url: '<% = submitURL%>', dataType: 'String', success: showDialog, data: 'data', тип: 'post'});});

couldnt format!!!

0 голосов
/ 04 августа 2011

точно не знаю, о чем вы спрашиваете, но, возможно, вы могли бы заставить свой контроллер загрузить представление в iFrame, а затем поместить iFrame в диалог?

...