How to get definite widget in controller

hello all

I have get some misunderstanding concerning Widget and Controller

each widget know his controller (the controller that this widget belongs to)

but I did not found methods in controller that return his Widgets… is it TRUE???


situation is following, I have 2 widgets in View. Widget-A and Widget-B

Widgets are similar (the same class) but differ by parameters.

from Widget-A is sent AJAX request, how could I call Widget-A’s action?

You can call it through contoller action. Of course, you need to define it.

да… да вот эту статью я читал

http://www.yiiframework.com/wiki/146/how-to-use-a-widget-as-an-action-provider/

но вот ведь в чем загвоздка…а что если я создаю виджеты динамично (по циклу скажем)

получается я должен подготовить метод action … и опять же возник у меня вопрос… а что виджет создается в процессе рендеринга выплевывается на экран и все… ??? ти.е нельзя в нем сохранять состояния и позже к ним обращаться

а зачем создавать виджеты динамично?

чтобы хранить состояния виджета, вы можете использовать сессии…

иногда это бывает нужно. Если вы сделали некий удобный виджет и имеете массив объектов для которых этот видджет надо нарисовать то мпочему бы не пробежаться п массиву и это не сделать… но это детали…

вопрос вот в чем если я в Виджите могу получить объект контроллера почему в контроллере нет метода для получения всех своих виджетов?

ведь это как бы ло бы удобно, есть виджеты на странице (у каждого сгенерилось свое уникальное имя) отправляем AJAX запрос и вклучаем туда в качестве параметра имя виджета и в контроллере вызываешь этот твиджет вызываем метод который надо и отрисоываешь в нужноем мето (чаще всего поверх прежнего)

вот такая идея. Более того мы можем установить в виджет некий параметр и позже (например при сохранении всего модуля) собираем данные со всех виджетов и ВУАЛЯ…

в догонку

согласно

http://www.yiiframework.com/wiki/146/how-to-use-a-widget-as-an-action-provider/

имеем

public function actions()

{

return array(

  'test.'=>'application.components.testProvider',


);

}

ну хорошо … а если виджет имеет одно и тож имя

получается для разделения надо записать

public function actions()

{

return array(

  'test_1.'=>'application.components.testProvider',


  'test_2.'=>'application.components.testProvider',


);

}

но в таком случае как я обращусь именно к тому виджету который МНЕ нужен… выходит он создается временно и тут же убивается… поэтому контроллер про них ничего не знает. Это пречально. Поправьте меня если я не прав