我有一个Yii表单,它调用另一个模型的渲染部分(团队has_many team_members).我想通过ajax调用部分视图来添加team / _form中的成员.所有工作(调用,显示,保存)除了ajax验证(服务器和客户端).如果我提交表单,会员的模型不会验证,即使在客户端,它也不会验证必填字段.
任何线索?
//_形成
<?PHP $form=$this->beginWidget('CActiveForm',array( 'id'=>'team-form','enableAjaxValidation'=>true,'enableClientValidation'=>true,'clientOptions'=>array( 'validateOnSubmit'=>true,'validateOnChange'=>true ),'htmlOptions' => array('enctype' => 'multipart/form-data'),)); ?>
//控制器
public function actionMember($index) { $model = new TeamMember(); $this->renderPartial('_member',array( 'model'=> $model,'index'=> $index ),false,true ); } public function actionCreate() { $model=new Team; $members = array(); if(isset($_POST['Team'])) { $model->attributes=$_POST['Team']; if(!empty($_POST['TeamMember'])){ foreach($_POST['TeamMember'] as $team_member) { $mem = new TeamMember(); $mem->setAttribute($team_member); if($mem->validate(array('name'))) $members[]=$mem; } } $this->redirect(array('team/create','id'=>$model->id,'#'=>'submit-message')); } $members[]=new TeamMember; $this->performAjaxMemberValidation($members); $this->render('create',array( 'model'=>$model,'members'=>$members )); }
//_会员
<div class="row-member<?PHP echo $index; ?>"> <h3>Member <?PHP echo $index+1; ?></h3> <div class="row"> <?PHP echo CHtml::activeLabel($model,"[$index]name",array('class'=>'member')); ?> <?PHP echo CHtml::activeTextField($model,array('class'=>'member')); ?> <?PHP echo CHtml::error($model,"[$index]name");?> </div> </div>
ProcessOutput设置为true.没有骰子.
将renderPartial()切换为render().没有骰子.
解决方法
如果你看一下
CActiveForm::run:
$cs->registerCoreScript('yiiactiveform'); //... $cs->registerScript(__CLASS__.'#'.$id,"jQuery('#$id').yiiactiveform($options);");
然后您将了解您的验证将无效,因为您渲染部分而不是整个页面.这些脚本显示在页面底部.所以你应该通过执行这些脚本解决这个问题.
部分渲染后,尝试获取应存储在scipts数组中的activeform脚本:
$this->renderPartial('_member',array('model'=> $model,'index'=> $index)); $script = Yii::app()->clientScript->scripts[cclientScript::POS_READY]['CActiveForm#team-form'];
之后,将其与渲染的html一起发送到页面:
echo "<script type='text/javascript'>$script</script>"
还记得在你将在页面上附加收到的html之前你应该包括jquery.yiiactiveform.js,如果你还没有(通过渲染另一个表单,或registerCoreScript(‘yiiactiveform’)),在调用ajax请求的页面上.否则将引发javascript错误.
希望这会有所帮助.
编辑:对不起我不明白你是表格的一部分,而不是整体.但是您的验证不会完全适用于同一个问题.因为jQuery(‘#$id’).yiiactiveform($options);没有为该字段创建脚本.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。