我是Yii框架的初学者。我想在我的createform中有一个弹出窗口,它从我的另一个表链接。这样做的目的是我有一个Dropbox,如果没有我想要选择的数据。我会先创造。我希望在我的表1 create.php中有一个弹出框,它将在我的表2中获得创建表单。这是我开始的。这里似乎有什么问题?
这是我的table1 create.php
的代码<?php echo CHtml::link('New Day',"",
array(
'style'=>'cursor:pointer; text-decoration:underline;',
'onClick'=>"{doDay(); $('#dialogDay).dialog('open');}"));?>
<?php
$this->beginWidget('zii.Widgets.jui.CJuiDialog',array(
'id'=>'dialogDay',
'options'=>array(
'title'=>'Add New Day',
'autoOpen'=>false,
'modal'=>true,
'width'=>550,
'height'=>470,
),
));
?>
<div class="divForForm"></div>
<?php $this->endWidget();?>
<script type="text/javascript">
function doDay()
{
<?php echo CHtml::ajax(array(
'url'=>array('day/NewDay'),
'data'=>"js:$(this).serialize()",
'type'=>'post',
'dataType'=>'json',
'success'=>"function(data)
{
if(data.status == 'failure')
{
$('#dialogDay div.divForForm').html(data.div);
$('#dialogDay div.divForForm form').submit(doDay);
}
else
{
window.location.href = ".Yii::app()->getBaseUrl().";
}
}",
))?>
return false;
}
</script>
在我的表2控制器
中public function actionNewDay()
{
$model= new Day;
if(isset($_POST['ajax']) && $_POST['ajax']=='day-form')
{
$model->attributes=$_POST['Day'];
echo CActiveForm::validate($model);
Yii::app()->end();
}
if(isset($_POST['Day']))
{
$model->attributes=$_POST['Day'];
$name=$model->name;
$mon=$model->mon;
$tue=$model->tue;
$wed=$model->wed;
$thurs=$model->thurs;
$fri=$model->fri;
$sat=$model->sat;
$sun=$model->sun;
$dayassign = new DayAssign();
if($model->save())
{
$dayassign->varName = $name;
$dayassign->varMon = $mon;
$dayassign->varTue = $tue;
$dayassign->varWed = $wed;
$dayassign->varThurs = $thurs;
$dayassign->varFri = $fri;
$dayassign->varSat = $sat;
$dayassign->varSun = $sun;
if($dayassign->save())
{
if(Yii::app()->request->isAjaxRequest)
{
echo CJSON::encode(array(
'status'=>'success',
));
}
else{
$url = Yii::app()->getBaseUrl();
Yii::app()->getRequest()->redirect($url);
}
}
}
if(Yii::app()->request->isAjaxRequest)
{
echo CJSON::encode(array(
'status'=>'failure',
'div'=>$this->renderPartial('day',array('model'=>$model),true)));
exit;
}
else
$this->render('day',array('model'=>$model,));
}
}
答案 0 :(得分:2)
我自己做了。这是代码。
<强>方案强> 我有一个包含班次的日模型,例如。夜晚,由我的EmpSched模型选择的早晨。让我们假设EmpSched想要选择下午班次,但是日模型还没有下午的模型,他必须先创建一天并丢失已插入的输入。
我们希望允许用户从empsche的形式创建日期,而不更改页面
这就是我所做的。
在我的日控制器中:
public function actionCreate()
{
$model=new Day;
// Uncomment the following line if AJAX validation is needed
//$this->performAjaxValidation($model);
if(isset($_POST['Day']))
{
$model->attributes=$_POST['Day'];
if($model->save())
{
if(Yii::app()->request->isAjaxRequest)
{
echo CJSON::encode(array(
'status'=>'success',
'div'=>"Day successfully added"
));
exit;
}
else
$this->redirect(array('view','id'=>$model->id_day));
}
}
if(Yii::app()->request->isAjaxRequest)
{
echo CJSON::encode(array(
'status'=>'failure',
'div'=>$this->renderPartial('_form',array('model'=>$model),true)));
exit;
}
$this->render('create',array(
'model'=>$model,
));
}
和我的EmpSched _form.php:
</div>
<?php echo CHtml::link('Create day', "", // the link for open the dialog
array(
'style'=>'cursor: pointer; text-decoration: underline;',
'onclick'=>"{addDay(); $('#dialogDay').dialog('open');}"));?>
<?php
$this->beginWidget('zii.widgets.jui.CJuiDialog', array( // the dialog
'id'=>'dialogDay',
'options'=>array(
'title'=>'Create Day',
'autoOpen'=>false,
'modal'=>true,
'width'=>550,
'height'=>470,
),
));?>
<div class="divForForm"></div>
<?php $this->endWidget();?>
<script type="text/javascript">
// here is the magic
function addDay()
{
<?php echo CHtml::ajax(array(
'url'=>array('day/create'),
'data'=> "js:$(this).serialize()",
'type'=>'post',
'dataType'=>'json',
'success'=>"function(data)
{
if (data.status == 'failure')
{
$('#dialogDay div.divForForm').html(data.div);
// Here is the trick: on submit-> once again this function!
$('#dialogDay div.divForForm form').submit(addDay);
}
else
{
$('#dialogDay div.divForForm').html(data.div);
setTimeout(\"$('#dialogDay').dialog('close') \",3000);
}
} ",
))?>
return false;
}
</script>
我希望生病帮助那些在我自己船上的人。