0

$( "#element")。loadイベントをトリガーするボタンがあります。このボタンと#elementは「ページA」内にあります

Yiiアクティブフォームがその要素内にロードされます(これを「ページB」と呼びましょう)。このアクティブフォームは、ajaxvalidation=trueになるように構成されています。yiiactiveform.jsファイルはメインレイアウト(ページA)にあり、そこにjquery.yiiactiveform.js参照を配置する必要があるため、activeformを呼び出すときにjquery.yiiactiveform.jsファイルがロードされないため、これは明らかに失敗します。

1つの解決策は、次の方法でアクティブフォームJSを「ページa」にプリロードすることです。

Yii::app()->clientScript->registerCoreScript('yiiactiveform');

また、「ページa」内のフォームアクションをバインドする対応するJSコードもあります。

<script type="text/javascript">
/*<![CDATA[*/
jQuery(function($) {
$('#register-form').yiiactiveform({'validateOnSubmit':true,....,'enableAjaxValidation':true}]});
});
/*]]>*/
</script>

もう1つは、これらのJS呼び出しをページB内に配置することですが、これは、ヘッドタグをページB内に配置することを意味します。現在、私のページBには、フォーム要素のみが含まれ、html、bodyタグは含まれていません。これは、フォームタグのみが含まれているためです。とにかくそれが必要です、このページはページAの中にそれをload()することによってのみアクセス可能です。

ただし、このアプローチはあまり優れていません。これは、ロードされたフォームで適切なJS呼び出しを手動でバインドするようなものであり、フレームワークの目的を無効にします。Yii activeform JSがjqueryのon()またはlive()メソッドをサポートしていればうまくいくと思います。

他に何か提案はありますか?

4

1 に答える 1

0

それを見つけた。ページ B への renderPartial() 呼び出しは、次のようにする必要があります。

$this->renderPartial('viewfile', array('var'=> $val),false,true);

4 番目のパラメータは true に設定する必要があります。これにより、ビュー ファイルが処理され、対応する JS コードがその中に挿入されます。

于 2012-08-02T03:13:37.680 に答える