我是Yii framework的新手。我发布了很多次但没有回复。
我在注册表单中有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,));
}
答案 0 :(得分:3)
当您使用以下标志在弹出窗口上呈现页面时使用renderPartial
,将第4个参数processOutput
设置为true
$this->renderPartial('view',array('model'=>$model),false,true);
<强> renderPartial() method 强>
http://www.yiiframework.com/doc/api/1.1/CController#processOutput-detail
答案 1 :(得分:2)
我猜测cjuidatepicker小部件的导入代码不在新的弹出窗口中。弹出窗口打开后,转到源代码,查看是否所有js导入都在那里?