Dropdownlist con Ajax MultimodelForm

Buenas tardes a toda la comunidad.

Actualmente estoy utilizando la extensión MultimodelForm, todo bien hasta ahí.

Este es el código.




<?php

$options = array(

array('idEntrega'=>'SI', 'descripcion'=>'SI'), array('idEntrega'=>'NO', 'descripcion'=>'NO'),

);

?>


<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array(

	'id'=>'factura-form',

	'enableAjaxValidation'=>false,

)); ?>


	<p class="help-block"><?php echo Yii::t('app','Fields with');?> <span class="required">*</span> <?php echo Yii::t('app','are required.');?></p>


	<?php //echo $form->errorSummary($model); ?>


	<?php echo $form->errorSummary(array_merge(array($model),$validatedMembers)); ?>


	<?php //echo $form->textFieldRow($model,'fechaVenta',array('class'=>'span5')); ?>


	<?php echo $form->labelEx($model,'fechaVenta');?>


		<?php $this->widget ('application.extensions.CJuiDateTimePicker.CJuiDateTimePicker',

                array(

                    'model'=>$model, //Model object

                    'attribute'=>'fechaVenta', //attribute name

                    'value'=>$model->fechaVenta,

                    'mode'=>'datetime', //use "time","date" or "datetime" (default)

                    'language'=>'es',

                    'options'=>array(

                            'regional'=>'es',

                            'autoSize'=>'true',

                            'dateFormat'=>'yy-mm-dd',

                            'timeformat'=>'hh:mm',

                            'changeMonth'=>'true',

							'changeYear'=>'true',

							'yearRange'=>'-10:+0',

                            //'ampm'=>'true',

                            'timeText'=>'Horario',

                            'hourText'=>'Hora',

                            'minuteText'=>'Minuto',

                        ) // jquery plugin options

            ));

        ?>


	<?php //echo $form->textFieldRow($model,'idVendedor',array('class'=>'span5','maxlength'=>10)); ?>


	<?php echo $form->dropDownListRow($model,'idVendedor', CHtml::listData(Vendedor::model()->findAll("activo='" . 'ACTIVO' . "'"), 'idVendedor', 'fullName'), array('class'=>'span5')); ?>


	<?php echo $form->textFieldRow($model,'idCliente',array('class'=>'span5','maxlength'=>15)); ?>


	<div class="col-md-6">


		<?php echo CHtml::ajaxSubmitButton(

			'Validar cliente', array('Ejemplo1'), array(

				'type' => 'POST',

				'update' => '#muestratiempo',

				'datatype' => 'json',

				),

				array('class' => 'btn btn-primary')

		); ?>


	</div>


	</br>


	<div id="muestratiempo" class="alert alert-info">Por favor, ingrese el número de cédula del cliente...</div>


	<?php //echo $form->textFieldRow($model,'idCliente',array('class'=>'span5','maxlength'=>10)); ?>


	<?php //echo $form->dropDownListRow($model,'idCliente', CHtml::listData(Cliente::model()->findAll(), 'idCliente', 'nombreCompleto'), array('class'=>'span5')); ?>


	<?php //echo $form->textFieldRow($model,'entrega',array('class'=>'span5','maxlength'=>100)); ?>


	<?php echo $form->dropDownListRow($model, 'entrega', CHtml::listData($options, 'idEntrega', 'descripcion'), array('class'=>'span5')); ?>


	<?php 

	// see http://www.yiiframework.com/doc/guide/1.1/en/form.table

	// Note: Can be a route to a config file too,

	//       or create a method 'getMultiModelForm()' in the member model


	$memberFormConfig = array(

		  'elements'=>array(


              'idProducto'=>array(

				'type'=>'dropdownlist',

				//'prompt' => 'Seleccione',

				//'items'=>CHtml::listData(Producto::model()->findAll(array('order'=>'descripcion ASC', 'condition'=>'activo=1')), 'idProducto', 'ProductoPrecio'),

				'items'=>CHtml::listData(Producto::model()->findAll(array('order'=>'descripcion ASC', 'condition'=>"activo='" . 'ACTIVO' . "'")), 'idProducto', 'descripcion', 'grupo'),

				/* Todo esto cambiar por el script del final de este archivo

				'ajax' => array(

					'type' => 'POST',

					'url'=>Yii::app()->createUrl('Factura/Ejemplo2'),

					'update' => '#Detalle_precioVenta',

					'success'=>'function(data){$("#Detalle_precioVenta").val(data); console.log($(this).parents("tr")); }'

					),

				*/

			),


            'precioVenta'=>array(

            	'type'=>'text',

            	'class' => 'precio_venta'

            	),


		  	'cantidad'=>array(

		  		'type'=>'text',

		  		'maxlength'=>40,

		  	),


			/*

		  	'idCultivo'=>array(

				'type'=>'dropdownlist',

				//'items'=>CHtml::listData(Producto::model()->findAll(array('order'=>'descripcion ASC', 'condition'=>'activo=1')), 'idProducto', 'ProductoPrecio'),

				'items'=>CHtml::listData(Cultivo::model()->findAll(), 'idCultivo', 'tipoCultivo'),

			),

			*/

		));


	  $this->widget('ext.multimodelform.MultiModelForm',array(

            'id' => 'id_member', //the unique widget id

            'addItemText' => 'Añadir',

            'removeText' => 'Eliminar',

            'removeConfirm' => 'Está seguro que desea eliminar este producto?',

            'formConfig' => $memberFormConfig, //the form configuration array

            'model' => $detalle, //instance of the form model

 

            //if submitted not empty from the controller,

            //the form will be rendered with validation errors

            'validatedItems' => $validatedMembers,


            'bootstrapLayout'=>true,


            'tableView' => true,


            'hideCopyTemplate'=>true,


            //array of member instances loaded from db

            'data' => $detalle->findAll('idFactura=:idFactura', array(':idFactura'=>$model->idFactura)),

        ));

     ?>


     <h1> $ 0.00 </h1> 


	<div class="form-actions">

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

			'buttonType'=>'submit',

			'type'=>'primary',

			'label'=>$model->isNewRecord ? Yii::t('app','Create') : Yii::t('app','Save'),

			//'htmlOptions' => array(

			//'confirm'=>'Desea crear esta factura?',

			//),

		)); ?>

	</div>


<?php $this->endWidget(); 


//Andres

$request_url = Yii::app()->createUrl('Factura/Ejemplo2');

$js = "$('tr.id_member_copy > td > select').on('change', function(obj){

	var parent_select = $(this);

	$.ajax({

		url: '$request_url',

		method: 'POST',

		success: function(data, textStatus, jqXHR){

			parent_select.parents('tr').find('input.precio_venta').val(data);

		}

	});

})";


Yii::app()->getClientScript()->registerScript('js', $js, CClientScript::POS_END);


?>




El problema es que en este código




'idProducto'=>array(

				'type'=>'dropdownlist',

				//'prompt' => 'Seleccione',

				//'items'=>CHtml::listData(Producto::model()->findAll(array('order'=>'descripcion ASC', 'condition'=>'activo=1')), 'idProducto', 'ProductoPrecio'),

				'items'=>CHtml::listData(Producto::model()->findAll(array('order'=>'descripcion ASC', 'condition'=>"activo='" . 'ACTIVO' . "'")), 'idProducto', 'descripcion', 'grupo'),

				/* Todo esto cambiar por el script del final de este archivo

				'ajax' => array(

					'type' => 'POST',

					'url'=>Yii::app()->createUrl('Factura/Ejemplo2'),

					'update' => '#Detalle_precioVenta',

					'success'=>'function(data){$("#Detalle_precioVenta").val(data); console.log($(this).parents("tr")); }'

					),

				*/

			),



El ajax me funciona únicamente para el primer dropdownlist, cuando añado uno nuevo con la extensión los demás no funcionan. Soy consiente que estoy actualizando solo 1 textField: en el ‘update’ => ‘#Detalle_precioVenta’.

Ahora cambie con la ayuda de un amigo el ajax de la siguiente manera:




$request_url = Yii::app()->createUrl('Factura/Ejemplo2');

$js = "$('tr.id_member_copy > td > select').on('change', function(obj){

	var parent_select = $(this);

	$.ajax({

		url: '$request_url',

		method: 'POST',

		success: function(data, textStatus, jqXHR){

			parent_select.parents('tr').find('input.precio_venta').val(data);

		}

	});

})";


Yii::app()->getClientScript()->registerScript('js', $js, CClientScript::POS_END);



Esto funciona para activar el método que tengo en el controlador, activa el método del controlador pero no me envía ningún dato por $_POST. Me gustaría saber porque no envía nada y como podría solucionarlo.

Gracias.

Buenas.

No te envía ningún dato por POST pq no estás enviando ningún dato. Tendrías que escribir algo así:




$.ajax({

                url: '$request_url',

                method: 'POST',

                data: {field1: value1, field2: value2},

                success: function(data, textStatus, jqXHR){

                        parent_select.parents('tr').find('input.precio_venta').val(data);

                }



Un saludo.