renderPartial формы и AJAX

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Ответить
EvilMachine
Сообщения: 7
Зарегистрирован: 2013.02.09, 20:31

renderPartial формы и AJAX

Сообщение EvilMachine »

Здравствуйте.

Мучает проблема, из того, что удалось прочитать, понимаю, что не меня одного. (Недавно в Yii)

Суть:
Есть контроллер MyController.
В нем два метода account и create
Вызвали mycontroller/account получили наши записи. Захотели создать еще одну запись, нажали ссылочку/кнопочку(не важно) которая вызывает наш второй метод - create. Получили AJAXом форму, пока все прекрасно. Заполнили, нажали и все стало грустно. А именно, нам бы хотелось и обрабатывать форму через AJAX, но не тут-то было, форма создается через renderPartial('mycontroller/create') и при сабмите, вместо того, чтобы честно обновиться в отведенном ей на странице месте, переходит на страницу mycontroller/create.
Вопрос, как вызванную через AJAX форму, по AJAXу же и сабмитить, без перехода на страницу формы.

Код: Выделить всё

class MyController extends MController
{
    public function actionCreate()
    {
        echo $this->renderPartial('create', array('model'=>$model),true);
    }
    public function actionAccount()
    {
        $this->renderPartial('account');
    }
}
 
Код виджета в представлении account

Код: Выделить всё

$this->widget('ext.EasyTabs.EasyTabs', array(
'tabs'=>array(
                   array(
                    'title' => 'Запись',
                'url'=>'create',
            ),
            'options' => '', // the options to pass to jQuery EasyTabs plugin
            'baseScriptUrl' => '', // путь к JavaScript файлам
            'cssFile' => '', // путь к CSS файлам
          )
    );
 
Код формы из представления create

Код: Выделить всё

    <div class="form">

        <?php $form=$this->beginWidget('CActiveForm', array(
            'id'=>'form', 
            'enableAjaxValidation'=>true,
            ));
        ?>
        <div class="row">
            <?php echo $form->textField($model,'account',array('name'=>'account')); ?>
            <?php echo $form->labelEx($model,'Запись',array('for'=>'account')); ?>
            <?php echo $form->error($model,'account'); ?>
        </div>

        <div class="row buttons">
                <?php echo CHtml::submitButton('Создать',array('name' => 'submit', 'class' => 'form_submit')); ?>
        </div>

    <?php $this->endWidget(); ?>

    </div><!-- form -->

P.S. В представлении account используется расширение easytabs. По нажатию на таб, на страницу AJAXом подгружается искомая форма, а дальше вышеописанная проблема при сабмите формы. Сама по себе форма работает и пишет в БД.
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: renderPartial формы и AJAX

Сообщение yiijeka »

А кнопку submit, стандартную заменить, на ajaxlink например, не пробовали?
EvilMachine
Сообщения: 7
Зарегистрирован: 2013.02.09, 20:31

Re: renderPartial формы и AJAX

Сообщение EvilMachine »

Пробовал, возможно не так как надо, но такой код ничего не отсылал. Буду крайне признателен за примеры реализации или схемы подключения представлений в контролеррах указанных мной выше

Код: Выделить всё

echo CHtml::ajaxLink(
            'Test request',          // the link body (it will NOT be HTML-encoded.)
            array('create'), // the URL for the AJAX request. If empty, it is assumed to be the current URL.
            array(
                'update'=>'.form',
            )
            );
EvilMachine
Сообщения: 7
Зарегистрирован: 2013.02.09, 20:31

Re: renderPartial формы и AJAX

Сообщение EvilMachine »

to yiijeka

Вопрос удалось решить с помощью ajaxSubmitButton с такими параметрами, спасибо за подсказку.

Код: Выделить всё

<?php echo CHtml::ajaxSubmitButton(Yii::t('job','Create'),
                        CHtml::normalizeUrl(array('create','render'=>false)),
                        array('success'=>'js: function(data) {
                            //alert(data);
                            $("#form_create").html(data); //#form_create обертка вокруг формы, чтобы можно было обновлять содержимое при наличии ошибок
                            //$("#mydialg").dialog("close");
                        }'),
                        array('id'=>'closeJobDialog','name' => 'create-submit', 'class' => 'form_submit')); 
//,'name' => 'create-submit', 'class' => 'form_submit') - без этих двух параметров форма отказывалась отсылать данные
?>
Заголовк CActiveForm стал выглядеть следующим образом

Код: Выделить всё

<?php $form=$this->beginWidget('CActiveForm', array(
            'id'=>'create-form',
            'enableAjaxValidation'=>true,
            'clientOptions' => array(
                    'validateOnSubmit' => true,
                    'validateOnChange' => false,
                ),
            'htmlOptions'=>array(
                     'class'=>'form',
                ),
            ));
        ?>
Толчком послужила статья CJuiDialog and AjaxSubmitButton
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: renderPartial формы и AJAX

Сообщение yiijeka »

Рад за вас. Спасибо, что отписались ;)
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: renderPartial формы и AJAX

Сообщение yan »

EvilMachine писал(а):to yiijeka

Толчком послужила статья CJuiDialog and AjaxSubmitButton
в чем была проблема-то разобрались? :)
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: renderPartial формы и AJAX

Сообщение yiijeka »

yan писал(а): в чем была проблема-то разобрались? :)
Проблема была озвучена в вопросе!

Код: Выделить всё

<?php echo CHtml::submitButton('Создать',array('name' => 'submit', 'class' => 'form_submit')); ?>
Кнопка стандартная не отправляет аjax запросы с последующим обновлением части страницы! Поэтому здесь её использовать не представляется возможным. Вот в этом и была проблема.
yiiframworker
Сообщения: 12
Зарегистрирован: 2013.10.19, 10:47

Re: renderPartial формы и AJAX

Сообщение yiiframworker »

Кнопка стандартная не отправляет аjax запросы с последующим обновлением части страницы!
Почему же, можно отправлять форму по AJAX с использованием submitButton.
Ответить