Yii,Fancybox和ajax加载的数据

时间:2012-12-20 21:42:39

标签: ajax validation yii fancybox

我的链接看起来像

<a class="fancy" href="/site/feedback">feedback</a>

Ajax电话:

$('.fancy').fancybox({
    wrapCSS: 'custom-fancy',
    padding: 0,
    type: 'ajax'
});

点击fancybox加载内容,控制器发送。

$this->renderPartial('_feedback')

反馈意见:

<?php
/* @var $this Controller */
/* @var $model FeedbackForm */
/* @var $form CActiveForm */

$form = $this->beginWidget('CActiveForm', array(
    'id' => 'feedback-form',
    'enableClientValidation' => TRUE,
)); ?>
<div><?= $form->textArea($model, 'feedback') ?></div>
<?=$form->error($model, 'feedback')?>
<? $this->widget('CCaptcha') ?>
<?=$form->textField($model, 'verifyCode', array('placeholder' => 'Captcha code'))?>
<div><?=CHtml::submitButton('Send', array('class' => 'r button'))?></div>
<? $this->endWidget() ?>

问题是这个加载的表单上没有javascript / ajax验证。我想,这是因为一些Yii脚本在ajax调用后没有加载(yiiActiveForm.js也许,我不知道)。 这种情况的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:4)

我们需要将 $ processOutput 设置为 true 作为第四个参数。 ( RenderPartial后处理默认值为false 。)然后只有 $ processOutput 方法会将注册的客户端脚本插入到适当位置的输出中。

$this->renderPartial('view file', array(data to be available to view file), false, true);

答案 1 :(得分:3)

好吧,你需要用javascript加载一些代码

$output = $this->renderPartial('_feedback', array(), true)
// you need set layout to false for render only your form
Yii::app()->clientScript->render($output);
// where you need remove jquery for prevent double initiation's jquery script
// it's not worked example!!!
preg_replace('@<script type="text/javascript" src="jquery.js"></script>@mi', '', $output);
// well, we may output
echo $output;