2012-12-20 71 views
0

我有一個鏈接,看起來像Yii的,的fancybox和Ajax加載數據

<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也許,我不知道)。 這種情況的最佳解決方案是什麼?

+0

請顯示您的ajax代碼加載反饋表 – Sergey

+0

添加到帖子,但它是簡單的,fancybox自己做我的工作。 – Meliborn

回答

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; 
+0

我在控制器中執行它,但服務器只發送我的表單的html,沒有任何js。 – Meliborn

+0

對不起,我的生日快樂。 – Meliborn

4

加載一些代碼,我們需要設置$ processOutput作爲第四個參數。 (的RenderPartial後處理默認值爲false)。然後只$ processOutput方法將插入註冊客戶端腳本到在適當的地方輸出。

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

好的答案@ Venu.OP需要接受這個.. – Gautam3164

+1

很有用的答案@venu –