Cbuttoncolumn Глюк

Доброго времени суток всем.

На странице есть CGridView (условно родитель). Ajax-ом выполняю renderPartial другого CGridView (усл. потомок). В потомке в ПЕРВОЙ строке CButtonColumn не работает кнопка (одна из кнопок).

Оба грида подобны.

Всю голову сломал уже.

С CGridView дела не имел, но навскидку предположу, что там где-нибудь кроется классический yii-шный кусок по регистрации js-кода, которому некуда подоткнуться при ajax-овом renderPartial.

На странице помимо грида есть форма поиска. На ней размещена кнопка submitButton. YII проименовал "активные" элементы на странице по типу id="yt#" (кнопка поиска и ячейки CbuttonColumn).

Так вот, ячейки в родитедьском гриде начали свою нумерацию с "yt1", а в дочернем с "yt0". У меня не срабатывала ячейка с id="yt0".

Выходит события всплывающего окошка обрабатывает код на основной странице (наверно).

решение/костыль

Изменить стандартное имя кнопки


echo CHtml::submitButton('Искать' ,array("name"=>"s_btn"));

Вопрос

Исходя из рассуждений выше получается YII генерирует логику обработки наперед. Так ли это?

Даю 90% что вы 2 раза регистрируете скрипты или не регистрируете их для попапа, из-за этого и проблемы.

Если я верно помню то эти автоматические ид это просто нумерация, а в $.fn.yiigridview например подставляется ид самого грида(тоесть тот что указан в свойстве ‘id’=>’’). То что вы написали в виде решения относится к вопросу как мелкое к мягкому.

Старайтесь указывать id элементам, избегайте двойной подгрузки скриптов, если нужно - после аякса регистрируйте стандартные обьекты (тотже yiigridview).

Что значит генерирование логики наперед? Yii инициализирует js-обьекты при подгрузке скриптов (init status если не ошибаюсь), эти js-обьекты отвечают за все действия, тоесть для gridview это сортировки,фильтры,обновление грида и т.п. При заполнении фильтра например в GET передается аттрибут->значение фильтра, search() возвращает dataProvider, и происходит перестроение gridview и $.fn.yiigridview.update().

Вот как-то так. Надеюсь Вам станет немного понятнее принцип работы yii.Я лично, как человек довольно плохо владеющий js, досихпор пытаюсь вникнуть в суть этих процессов.

To ineersa:

буду стараться разбираться в логике работы фреймворка, ведь понимание одного принципа избавляет от знания десяти правил.

В догонку.

Корень зла при выполнении ajax запросов, именно в этом была проблема, кроется в одинаковых id элементов на странице и попапе, а именно многочисленный вызов или не срабатывание на события.

Лекарство: how-to-avoid-multiple-ajax-reques

Я делаю вот так, чтобы избежать конфликтов




'id' => 'form_submit_'.rand(1,255)



Пока хватает.