Cjuidialog + Cgridview + Dropdownlist

Estou carregando um CGridView e um DropDownList dentro de um CJuiDialog assim:

_serveds.php // Botão mais que vai carregar o CJuiDialog




<?php echo CHtml::ajaxLink(

	'<i class="icon-plus"></i>' . Yii::t('model', 'Add new served person'),

	$this->createUrl('person/corporation/personServePerson/renderSearchServed', array(

		'id'=>$model->id,

		'typePerson'=>$personType,

	)),

	array('update' => '#container-servepersonsearch'),

	array('class' => 'btn')

); ?>


<div id="container-servepersonsearch" style="visibility: hidden;"></div>



_searchPersonLink.php // Render do conteúdo do dialog




<?php $this->beginWidget('zii.widgets.jui.CJuiDialog', array(

	'id' => 'dialog-serveperson',

	'options' => array(

	'autoOpen' => true,

	'title' => Yii::t('model', 'Add new served person'),

	'modal' => true,

	'width' => 800,

	'heigth' => 650,

        'close'=>'js:function(){ $("#dialog-serveperson").remove(); }',

		'resizable'=>false,

	)

)); ?>


<div>

	<?php echo CHtml::dropDownList('cb-persontype', $typePerson, array(

		'I' => Yii::t('app', 'Individual'),

		'C'=>Yii::t('app', 'Corporation')),

		array(

			'id' => 'selected-typeperson',

		)

	); ?>

	<?php $this->widget('bootstrap.widgets.BootButton', array(

		'buttonType'=>'button',

		'type'=>'primary',

		'icon'=>'ok',

		'label'=>Yii::t('app', 'Search'),

		'htmlOptions'=>array(

			'id'=>'bt-searchserved'

		),

	)); ?>

</div>


<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'personserve-grid',

	'ajaxUpdate'=>true,

	'dataProvider'=>$dataProvider,

	'columns'=>array(

		'id',

		'person_full_name',

		'nickname',

		'datetime_inclusion',

		'status',

	),

)); ?>


<div class="modal-actions">

</div>


<?php $this->endWidget('zii.widgets.jui.CJuiDialog'); ?>


<?php Yii::app()->clientScript->registerScript('search', "

	jQuery('#selected-typeperson').change(function() {

		$.fn.yiiListView.update('personserve-grid', {

			type: 'GET',

			url: yiiAjaxUrlPersonServe + '?id=' + personId + '&typePerson=' + jQuery('#selected-typeperson:selected').val()

		});

	});

"); ?>



Nesse código tentei fazer algo que encontrei na internet, quando mudo o valor do DropDownList ele deveria atualizar o CGridView passando a URL com o parâmetro do valor selecionado.

Mas quando troco o valor o JS da um erro: ‘$.fn.yiiListView is undefined’

No Controller não parece haver nada errado, mas ai está o código dele.




$personId = $_REQUEST['id'];

$typePerson = $_REQUEST['typePerson'];

	

$form = new CActiveForm();

$dataProvider = new CActiveDataProvider('Person');

	

$this->renderPartial('_searchPersonLink', array(

	'personId'=>$personId,

	'typePerson'=>$typePerson,

	'form'=>$form,

	'dataProvider'=>$dataProvider,

), false, true);

		

Yii::app()->end();



Ai está meu problema, dentro de um dialog quero atualizar um CGridView enviando um parâmetro(valor do DropDownList) para o controller fazer o tratamento. Sei que no controller ainda não está sendo utilizado o $typePerson, mas quero primeiro conseguir atualizar o CGridView para depois montar um $criteria.

Não sei se a forma que eu estou tentando atualizar é funcional ou se é a melhor forma de se fazer isso. Não quero um campo que fique dentro do CGridView, pois os atributos não fazem parte do $model que eu estou carregando e porque depois eu precisaria adicionar novos parâmetros de busca.

Se não fui claro em alguma coisa eu explico novamente,

Obrigado,

Espero que possam ajudar.

vgeorgo,

Tenta usar:


$.fn.yiiGridView.update();

Quando tiver usando CListView, ai sim voc~e usa:


$.fn.yiiListView.update();

Nossa, estava tão doido porque não estava funcionando que nem percebi que estava usando um elemento diferente, =/

Vou fazer o teste aqui e já posto se foi resolvido.

---- Edit ----

Bom, agora funcionou (com o comando certo vai ne o/)

Agora estou confuso sobre uma outra coisa.

Para renderizar meu Dialog com o CGridView executo a action:




public function actionRenderSearchServed()

{

	$personId = $_REQUEST['id'];

	$typePerson = $_REQUEST['typePerson'];

	

	$form = new CActiveForm();

	$dataProvider = new CActiveDataProvider('Person');

	

	$this->renderPartial('_searchPersonLink', array(

		'personId'=>$personId,

		'typePerson'=>$typePerson,

		'form'=>$form,

		'dataProvider'=>$dataProvider,

	), false, true);

	

	Yii::app()->end();

}



Caso eu vá atualizar o CGridView com o Ajax, mando para a mesma action ou tem algum tipo de retorno específico que tem que retornar para função???

Lembrando que eu estou fazendo esses comandos para atualizar:




jQuery('#selected-typeperson').change(function() {

	$.fn.yiiGridView.update('personserve-grid', {

		type: 'GET',

		url: yiiAjaxUrlPersonServe + '?id=' + personId + '&typePerson=' + jQuery('#selected-typeperson').val()

	});

});



---- Edit ----

Já sei o que estava errado ai em cima, minha variável ‘yiiAjaxUrlPersonServe’ devia estar vindo branca.

Agora uma dúvida, estou com o refresh com ajax funcionando, só que gostaria de saber como funciona, pois eu faço um renderPartial do dialog inteiro com minha action, e mesmo o comando $.fn.yiiGridView.update(); direciona para a Action que também renderiza esse mesmo partial, mas não perco nenhuma informação dos campos que eu já havia preenchido (o que me fez acreditar que não recarrega o conteúdo do render inteiro, mas somente o GridView), alguém sabe me explicar como isso funciona?