среда, 21 января 2015 г.

Обновление таблиц и форм из JavsScript

Все кто начинает работать с Yii, в первую очередь знакомятся с такими виджетами, как CGridView и CActiveForm. Это очень удобные и гибкие виджеты.

Но бывают случаи, когда хочется обойти стандартное поведение. Для подобных случаев в существуют JavaScript методы.

CGridView

Ручной запуск обновления таблицы:


$.fn.yiiGridView.update(gridID);


или, для тех кто использует виджет TbJsonGridView из библиотеки YiiBooster:

$.fn.yiiJsonGridView.update(gridID);

где gridID - уникальный идентификатор, указанный  в параметрах виджета (или созданный автоматически при инициализации).

CActiveForm

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

$.fn.yiiactiveform.updateSummary(formSelector, errorsObject);

где formSelector - jQuery селектор формы, а errorsObject- объект с информацией об ошибках: { activeAttributeId: [errors] }, который получаем в формате JSON на стороне сервера при помощи:

CActiveForm::validate($model);

Внимание! Для того чтобы Yii подключил плагин yiiactiveform, необходимо в настройках виджета включить AJAX-валидацию. Если никакие стандартные действия валиадации вам не нужны, их можно отключить в clientOptions. Пример:

$form = $this->beginWidget('bootstrap.widgets.TbActiveForm', [
        'id' => 'myForm',
        'enableAjaxValidation' => true,
        'clientOptions' => ['validateOnChange' => false],
]);