2014-01-07 46 views
0

要改善初始页面加载,我创建的页面上的大部分内容仅在需要时加载。为此,我通过ajax调用使用以下代码。Yii&Bootstrap小部件无法在第二个Ajax后工作

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

这工作正常,所有的小部件工作。这是造成主题设计的问题,但目前这不是主要问题。

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

其他Q &如提到.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); 
    }); 
} 

回答

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在您需要的部件

相关问题