1

私は Yii フレームワークを初めて使用します。何度も投稿しましたが、返信がありません。cjuidatepickerウィジェットを使用した登録フォームに日付フィールドがあります。このウィジェットは静的ページではうまく機能しますが、ポップアップ フォームで使用すると、このウィジェットは表示されません。

アドバイスをいただければ幸いです。

ポップアップ ダイアログを開くためのリンク。そのコードはここにあります。

<?php
    echo CHtml::link('Add Client ', "",  
        array(
            'style'=>'cursor: pointer; font-size:20px; text-decoration: underline;',
            'onclick'=>"{addclient(); $('#dialogclient').dialog('open');}"
        )
    );
?>

cjuidatepickerウィジェットコード:

<?php
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
    'model'=>$model,
    'value'=>'p_end_date',
    'attribute'=>'p_end_date',
    // additional JavaScript options for the date picker plugin
    'options'=>array(
        'showAnim'=>'fold',
        'dateFormat'=>'yy-mm-dd',
    ),
    'htmlOptions'=>array(
        'style'=>'height:20px;',                
    ),
));

更新された編集: URL を使用して _from.php をレンダリング/開くためのコード

<script type="text/javascript">
   // here is the magic
function addclient()
{
<?php echo CHtml::ajax(array(
      **'url'=>array('client/create'),**
        'data'=> "js:$(this).serialize()",
        'type'=>'post',
        'dataType'=>'json',
        'success'=>"function(data)
        {
            if (data.status == 'failure')
            {
                $('#dialogclient div.divForForm').html(data.div);
                      // Here is the trick: on submit-> once again this function!
                $('#dialogclient div.divForForm form').submit(addclient);
            }
            else
            {
                $('#dialogclient div.divForForm').html(data.div);
                setTimeout(\"$('#dialogclient').dialog('close') \",3000);
            }

        } ",
        ))
    ?>;
    return false; 

      }

    </script>

Actioncreate() コントローラ コード

         public function actionCreate()
           {
           $model=new client;

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

    if(isset($_POST['client']))
    {
        $model->attributes=$_POST['client'];


        if($model->save())
        {
            if (Yii::app()->request->isAjaxRequest)
            {
                echo CJSON::encode(array(
                    'status'=>'success', 
                    'div'=>"Client successfully added"
                    ));
                exit;               
            }
            else
                $this->redirect(array('view','id'=>$model->id));
        }
    }

    if (Yii::app()->request->isAjaxRequest)
    {
        echo CJSON::encode(array(
            'status'=>'failure', 
            'div'=>$this->renderPartial('_form', array('model'=>$model), true)));

        exit;               
    }
    else
        $this->render('create',array('model'=>$model,));
}
4

2 に答える 2

3

ポップアップでページをレンダリングするときはrenderPartial、次のフラグを使用して、4 番目の引数processOutputをに設定します。true

$this->renderPartial('view',array('model'=>$model),false,true);

renderPartial() メソッド

http://www.yiiframework.com/doc/api/1.1/CController#processOutput-detail

于 2012-12-04T09:38:17.577 に答える
2

私が推測するのは、cjuidatepicker ウィジェットのインポート コードが新しいポップアップ ウィンドウにないことです。ポップアップ ウィンドウが開いたら、ソース コードに移動し、すべての js インポートがあるかどうかを確認します。

于 2012-12-04T08:32:37.273 に答える