Все кто начинает работать с Yii, в первую очередь знакомятся с такими виджетами, как CGridView и CActiveForm. Это очень удобные и гибкие виджеты.
Но бывают случаи, когда хочется обойти стандартное поведение. Для подобных случаев в существуют JavaScript методы.
CGridView
Ручной запуск обновления таблицы:
или, для тех кто использует виджет TbJsonGridView из библиотеки YiiBooster:
где gridID - уникальный идентификатор, указанный в параметрах виджета (или созданный автоматически при инициализации).
CActiveForm
В случае ручной отправки и обработки формы есть возможность отобразить ошибки так, как это делает Yii, в красным блоке. Для этого используем метод.
где formSelector - jQuery селектор формы, а errorsObject- объект с информацией об ошибках: { activeAttributeId: [errors] }, который получаем в формате JSON на стороне сервера при помощи:
Внимание! Для того чтобы Yii подключил плагин yiiactiveform, необходимо в настройках виджета включить AJAX-валидацию. Если никакие стандартные действия валиадации вам не нужны, их можно отключить в clientOptions. Пример:
Но бывают случаи, когда хочется обойти стандартное поведение. Для подобных случаев в существуют 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],
]);