2014-01-07 24 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在您需要的部件

相關問題