YII Booster Select2Row не работает после рендеринга
Я пытаюсь использовать виджет yiibooster select2row в представлении, обновленном через ajax. У меня есть select2row со списком имен людей, найденных моделью.
После выбора одного я пытаюсь обновить другие поля в представлении с помощью ajax и renderpartial. Я делаю это, регистрируя скрипт для события on change.
Он работает 1-й раз, но после рендеринга он больше не работает... и даже виджет больше не отображается правильно.
Вот мой контроллер действия
public function ActionView() {
// Model Setting
if(isset($_POST[idKey]) and $_POST[idKey] > 0) {
$docente=Docente::model()->findByPk($_POST[idKey]);
} else {
$docente=new Docente();
}
if (Yii::app()->request->isAjaxRequest) {
echo CJSON::encode(array(
'divFormScheda'=>$this->renderPartial('_form',array('docente'=>$docente,), true, false),
));
} else {
$this->render('view', array('docente'=>$docente,));
}
}
Вот мой взгляд
// Script to make the ajax update on change of the select2 widget
Yii::app()->clientScript->registerScript('wric', "
jQuery('#Docente_id').on('change', function(e) {
var idKey = $('#Docente_id').val();
jQuery.ajax({
'url':'/regele/docente/view',
'data':$(this).serialize() + '&idKey=' + idKey,
'type':'post',
'dataType':'json',
'success':function(data) {
$('#divFormScheda').html(data.divFormScheda);
},
'cache':false
});
return false;
});
");
//
// Display Scheda
//
echo CHtml::openTag('div',array('id'=>'divFormScheda'));
$this->renderPartial('_form', array('docente'=>$docente,), false, false);
echo CHtml::closeTag('div');
И вот мой _form.php используется в renderpartial
$form = $this->beginWidget(
'bootstrap.widgets.TbActiveForm',
array(
'id' => 'idFormR',
'type' => 'horizontal',
'htmlOptions' => array('class' => 'well'),
)
);
// Error
echo $form->errorSummary($docente,"Errori riscontrati:<br /><br />");
// Input Hidden to read the idKey to set the ajax post
echo $form->hiddenField($docente, 'id', array('id' => 'idKey'));
// select2row widget for the selection
echo $form->select2Row($docente, 'id',
array(
'data' => CHtml::listData(Docente::model()->findAll(), 'id', 'cognome'),
'options' => array(
'placeholder' => 'Select ...',
'allowClear' => true,
'width' => '40%',
)
)
);
// Fields
echo $form->textFieldRow($docente, 'nome', array('class' => 'input-xlarge', 'disabled' => true));
$this->endWidget();
В форме я использовал скрытое поле для хранения идентификатора, используемого в скрипте для отправки запроса ajax через POST.
На самом деле я не понимаю, почему это работает только в первый раз.....
Спасибо
1 ответ
Вы должны установить для processOutput значение true, т.е.
$this->renderPartial('_form',array('docente'=>$docente,), true, true);
Это должно работать так