Yii Framework Forum: Дублируется Jquery В Cjuidialog, Модальность - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Дублируется Jquery В Cjuidialog, Модальность Rate Topic: -----

#1 User is offline   Maksym 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 15-February 13

Posted 15 February 2013 - 04:12 AM

Приветствую.

Помогите решить две проблемы с CJuiDialog:

1. если в свойствах CJuiDialog указать modal => true, все текстовые поля ввода в диалоге (CActiveForm) становятся задизабленными, ничего нельзя ввести.
2. у меня во вью есть два CJuiDialog (А и В), оба с CActiveForm. Почему-то дублируется jQuery для диалога В. Содержимое диалога А выводится путем $this->render (поскольку наследуется из CWidget), второго - $this->renderPartial непосредственно во вью. Во втором случае пробовал играться с параметрами true, false - количество подключений jQuery только увеличивается. Без них - все равно остается два для диалога В.

В чем может быть причина? Может, кто-нибудь сталкивался с подобным поведением?

PHP 5.4.11, Yii 1.1.13, jQuery UI - 1.8.

Спасибо.

P.S. Код:

Диалог В, дублирующий javascript. View:

    <? echo CHtml::link( CHtml::encode( Yii::t('account','TEXT_CHANGE_PASSWORD') ), array( 'action', 'id'=>'#' ), array( 'onclick'=>'$("#updatePasswordDialog").dialog("open"); return false;' ) ); ?>
<!-- Change password dialog -->
<?  $this->beginWidget('zii.widgets.jui.CJuiDialog',array(
        'id'=>'updatePasswordDialog',
            // additional javascript options for the dialog plugin
                'options'=>array(
                    'title' => Yii::t('account','TEXT_CHANGE_PASSWORD'),
                    'autoOpen' => false,
                    'modal' => false,
                    'resizable' => false,
                    'width' => 'auto',
                    'height' => 'auto',
                    'position' => 'center',
                    'dialogClass' => 'class'
                    ),
                ));
    Yii::app()->clientScript->scriptMap['jquery-ui.min.js'] = false;
    Yii::app()->clientScript->scriptMap['jquery.min.js'] = false;
    echo $this->renderPartial('_updatePassword',array( 'model'=>$model ));
    $this->endWidget('zii.widgets.jui.CJuiDialog');
?>
<!-- end of update mileage dialog -->


_updatePassword.php:

<? $form = $this->beginWidget('CActiveForm', array(
    'id'=>'update-password-form' . rand(),
    'enableAjaxValidation'=> false,
    'htmlOptions' => array('class'=>'uniForm'),
));
?>
<fieldset>
<div class="ui-dialog-buttonpane ui-helper-clearfix" id="errorSummary1">
<? echo $form->errorSummary( $model, NULL, NULL, array('class'=>'ctrlHolder error') ); ?>
</div>
<div class="ctrlHolder">
<?  echo $form->labelEx( $model, 'currentPassword' );
    echo $form->passwordField( $model, 'currentPassword', array('size'=>32, 'maxlength'=>32, 'value'=>'') );
?>
</div>
<div class="ctrlHolder">
<?  echo CHtml::label( Yii::t('account','TEXT_NEW_PASSWORD'), false );
    echo $form->passwordField( $model, 'password', array('size'=>32, 'maxlength'=>32, 'value'=>'') );
?>
</div>
<div class="buttonHolder">
<?
    $this->widget('zii.widgets.jui.CJuiButton', array(
                'name'=>'submit_' . rand(),
                'caption'=> Yii::t('app','TEXT_SAVE'),
                'htmlOptions'=>array('style' => 'width: 130px; height:25px; font-size: 8pt;',
                         'ajax' => array('url' => Yii::app()->createUrl(Yii::app()->baseUrl . '/account/updatePassword'),
                                'type'=>'post',
                                'data'=> 'js:jQuery(this).parents("form").serialize()',
                                'dataType' => 'json',
                                'success'=>'function(r) {
                                    if( r != null && r.status == "success" ) {
                                        window.location.reload();
                                    } else {
                                        $("#errorSummary1").empty();
                                        $("#errorSummary1").append(r.data);
                                        return false;
                                    }
                                    }'
                            )
                )
        )
    );
?>
</div>
</fieldset>
<? $this->endWidget('CActiveForm'); ?>


Вот что получается в итоге:

<!-- Change password dialog -->
<div id="updatePasswordDialog">
<form class="uniForm" id="update-password-form1729518609" action="/ru/account/viewProfile" method="post">
<div style="display:none"><input type="hidden" value="fc61228d4463429579e57c4f066ac8db38bd278d" name="YII_CSRF_TOKEN" /></div><input name="Account[name]" id="Account_name" type="hidden" value="XXX" /><input name="Account[currency]" id="Account_currency" type="hidden" value="-1" /><input name="Account[email]" id="Account_email" type="hidden" value="XXX" /><fieldset>
<div class="ui-dialog-buttonpane ui-helper-clearfix" id="errorSummary1">
</div>
<div class="ctrlHolder">
<label for="Account_currentPassword">TEXT_CURRENT_PASSWORD</label><input size="32" maxlength="32" value="" name="Account[currentPassword]" id="Account_currentPassword" type="password" /></div>
<div class="ctrlHolder">
<label>TEXT_NEW_PASSWORD</label><input size="32" maxlength="32" value="" name="Account[password]" id="Account_password" type="password" /></div>
<div class="buttonHolder">
<input style="width: 130px; height:25px; font-size: 8pt;" id="submit_896181584" name="submit_896181584" type="submit" value="Сохранить" />
</div>
</fieldset>
</form></div><!-- end of update mileage dialog -->
<script type="text/javascript">
/*<![CDATA[*/
jQuery('#btnEditAccount').button([]);
jQuery('#btnEditParams').button([]);
jQuery('#updatePasswordDialog').dialog({'title':'TEXT_CHANGE_PASSWORD','autoOpen':false,'modal':true,'resizable':false,'width':'auto','height':'auto','position':'center'});
jQuery('body').on('click','#submit_896181584',function(){jQuery.ajax({'url':'/ru/account/updatePassword','type':'post','data':jQuery(this).parents("form").serialize(),'dataType':'json','success':function(r) {
									if( r != null && r.status == "success" ) {
									    window.location.reload();
									} else {
									    $("#errorSummary1").empty();
									    $("#errorSummary1").append(r.data);
									    return false;
									}
								    },'cache':false});return false;});
jQuery('#submit_896181584').button([]);
/*]]>*/
</script>

и в конце страницы то же самое:
<script type="text/javascript">
/*<![CDATA[*/
jQuery(function($) {
jQuery('#btnEditAccount').button([]);
jQuery('#btnEditParams').button([]);
jQuery('#updatePasswordDialog').dialog({'title':'TEXT_CHANGE_PASSWORD','autoOpen':false,'modal':true,'resizable':false,'width':'auto','height':'auto','position':'center'});
jQuery('body').on('click','#submit_896181584',function(){jQuery.ajax({'url':'/ru/account/updatePassword','type':'post','data':jQuery(this).parents("form").serialize(),'dataType':'json','success':function(r) {
									if( r != null && r.status == "success" ) {
									    window.location.reload();
									} else {
									    $("#errorSummary1").empty();
									    $("#errorSummary1").append(r.data);
									    return false;
									}
								    },'cache':false});return false;});
jQuery('#submit_896181584').button([]);
/*]]>*/
</script>

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users