0

为了改善初始页面加载,我正在创建的页面上的大部分内容仅在需要时加载。为此,我通过 ajax 调用使用以下代码。

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

这工作正常,所有的小部件都工作。这会导致主题设计出现问题,但目前这不是主要问题。

我遇到的问题是有时需要再次调用 ajax 来更新视图。为此,我使用相同的参数调用完全相同的 ajax 函数,但在第二次调用时,所有小部件(即:TbSelect2 和 CJuiDatePicker)都停止工作,而是得到标准选择和日期文本框。这反过来又破坏了客户端验证。

其他问答提到.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 框架论坛: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 回答