Yii&第二个Ajax之后,Bootstrap小部件无法正常工作

时间:2014-01-07 10:03:52

标签: jquery ajax twitter-bootstrap yii zii-widgets

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

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

这很好,所有小部件都可以正常工作。它引起了主题设计的问题,但这不是目前的主要问题。

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

其他Q&提到.unbind(),这是要走的路吗?如果是这样,我是否正确地说在ajax调用之前所有widget元素都需要取消绑定?

谢谢,我也会发布我的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);
    });
}

1 个答案:

答案 0 :(得分:0)

我终于找到了答案,这要归功于:

Yii Framework Forum: ajax and widgets

诀窍是在控制器中渲染窗口小部件,但将输出存储为变量,如下所示:

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

注意:最后的“true”参数允许您将结果放在$html变量中。

然后在客户端脚本的帮助下渲染脚本。

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

然后将变量传递给视图(我通过renderPartial进行)并在需要小部件的地方使用echo $html

相关问题