0

最初のページの読み込みを改善するために、私が作成しているページのコンテンツのほとんどは、必要な場合にのみ読み込まれます。これを行うには、ajax 呼び出しを介して次のコードを使用しています。

$this->renderPartial('_callhistory', array(
                        'modelCalls'=>$modelCalls,
                        'fid'=>$fid,                        
), false, true);

これは正常に機能し、すべてのウィジェットが機能します。メインテーマのデザインに問題が発生していますが、現時点では大きな問題ではありません。

私が抱えている問題は、ビューを更新するために ajax を再度呼び出す必要がある場合があることです。これを行うために、同じパラメーターを使用してまったく同じ ajax 関数を呼び出していますが、2 回目の呼び出しですべてのウィジェット (つまり、TbSelect2 と CJuiDatePicker) が機能しなくなり、代わりに標準の選択と日付のテキスト ボックスが表示されます。これにより、クライアント側の検証が中断されます。

その他の Q&A が言及さ.unbind()れていますが、これでよいのでしょうか。もしそうなら、ajax 呼び出しの前にすべてのウィジェット要素をバインド解除する必要があると言うのは正しいですか?

ありがとうございます。私の Ajax も投稿しますが、このようなすべての更新を処理することに注意してください。

function renderSectionView(fid, viewid, headerid, panelid, extraparams){
    var panel = $('#'+panelid);
    panel.html("<img src='images/ajax-loader-bar.gif' class='loadingbar' />");

    var param = {   'fid':fid,
            'viewid':viewid
            };  

    var url = controller_url_builder('SubViewAjax', param);

    var jqxhr = $.post( url, extraparams, function(data) {
        panel.html(data);
    })
    .done(function() {
        renderedlist.push(viewid+fid);
    })
    .fail(function() {
        panel.html("<span class='error'>There has been an error, please refresh the page and try again</span>");
    })
    .always(function() {
        scrollToAcc(headerid);
    });
}
4

1 に答える 1

0

ここのおかげで、私は最終的にこれに対する答えを見つけました:

Yii Framework フォーラム: ajax とウィジェット

トリックは、コントローラーでウィジェットをレンダリングすることですが、次のように出力を変数として保存します。

$html = $this->widget( $className,  $properties=array ( ), TRUE);

注: 最後の「true」パラメーターを使用すると、結果を$html変数に入れることができます。

次に、クライアント スクリプトを使用してスクリプトをレンダリングします。

Yii::app()->getClientScript()->renderBodyBegin($html);
Yii::app()->getClientScript()->renderBodyEnd($html);

次に、変数をビューに渡し(renderPartial経由で行っています)echo $html、ウィジェットが必要な場所で使用します

于 2014-03-17T14:22:31.140 に答える