0

次のようなリンクがあります

<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かもしれませんが、わかりません)。この状況に対する最善の解決策は何ですか?

4

2 に答える 2

4

4番目のパラメーターとして$processOutputtrueを設定する必要があります。RenderPartial後処理のデフォルト値はfalseです。)次に、$ processOutputメソッドのみが、登録されたクライアントスクリプトを出力の適切な場所に挿入します。

$this->renderPartial('view file', array(data to be available to view file), false, true);
于 2013-07-04T06:52:14.543 に答える
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;
于 2012-12-21T10:17:10.907 に答える