2

通过 AJAX 更新内容时,renderPartial.CJuiDatePicker 未正确加载。单击其字段日历时不会出现。

请帮助解决这个问题。

控制器代码:

public function actionEditTestAjax()
{   
        $Okstatus  = 0;
        $id  = (int)$_POST['ID'];
        $newPerson = $this->loadModel($id);
        $newPerson = $this->loadModel( $id )->person;

    if(isset($_POST['Person']))
            {
                $newPerson->attributes=$_POST['Person'];
                if($newPerson->save())
                    $Okstatus = 1;
            }

        Yii::app()->clientscript->scriptMap['jquery.js'] = false;

         echo CJSON::encode( array(
                'status' => 'OK',
                'div' => $this->renderPartial( 'editAjax', array(
                                'person' => $newPerson), 
                                true, true ),
            ));

        exit;
   }

查看代码:

<div class="form">

    <?php

    $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
        'id'=>'person-form-edit_person-form',
        'type'=>'horizontal',
         'enableAjaxValidation'=>false,
          'htmlOptions'=>array(
                               'onsubmit'=>"return false;",/* Disable normal form submit */
                               'onkeypress'=>" if(event.keyCode == 13){ send(); } " /* Do ajax call when user presses enter key */
                             ),

    )); ?>

    <fieldset style="position: relative;">
        <legend> <?php echo Yii::t('Employee', 'Personal information'); ?> </legend>


    <div class="control-group">
            <?php echo $form->labelEx($person,'birthDate',array('class'=>'control-label')); ?>
            <div class="controls">
            <?php
            $this->widget('zii.widgets.jui.CJuiDatePicker', array(
                'model'=>$person,
                'attribute'=>'birthDate',
                'value'=>Yii::app()->dateFormatter->format(Yii::app()->locale->dateFormat, $person->birthDate),
                'language' => Yii::app()->language,
                // additional javascript options for the date picker plugin
                'options'=>array(
                    //'showAnim' => 'fold',
                    'showAnim'=>'fold',
                    'changeMonth' => 'true',
                    'changeYear' => 'true',
                    'showOtherMonths' => 'true',
                    'selectOtherMonths' => 'true',
                    'showOn' => 'both',
                    'buttonImage' => '/images/calendar-view-month.png',
                    'buttonImageOnly' => 'true',
                    'yearRange' => 'c-100:c'
                ),
                'htmlOptions' => array( 
                    'size' => 10,
                    'maxlength' => 10,
                ),
            ));
            ?>
            </div>
            <?php echo $form->error($person,'birthDate'); ?>
        </div>

    </fieldset>

    <div class="form-actions">

            <?php echo CHtml::Button('SUBMIT',array('onclick'=>'send();')); ?> 

        </div>

    <?php $this->endWidget(); ?>

</div>

*

但是 CJuiDatePicker 日历没有显示

.*

在此处输入图像描述

4

3 回答 3

1

这是 Yii 中 renderPartial 很常见的问题。简单的解决方案是将 renderPartial 的第四个参数设置为 true,这样 Yii 将包含显示日期选择器所需的脚本。

但是,有时将第 4 个参数设置为 true 可能会引入新问题,例如无限递归循环和其他一些脚本无法正常工作。

我在这里找到了一个很好的解决方案cjuidatepicker widget in yii framework

看第二个答案。这个对我有用。

于 2013-12-05T05:04:07.843 回答
0

@ippi 有原因,也许你需要把它放在视图“editAjax”的末尾(部分渲染)。

    <?php Yii::app()->getClientScript()->scriptMap=array('jquery.js'=>false, 'jquery.ui.js'=>false); ?>

并控制“jquery.ui.js”是否也在重新加载。

于 2013-08-01T07:17:45.223 回答
0
$this->renderPartial( 'editAjax', array(
                            'person' => $newPerson), 
                            false, true ),

是诀窍:-)

于 2015-02-15T13:53:15.537 回答