초기 페이지로드를 개선하기 위해 내가 만들고있는 페이지에있는 대부분의 콘텐츠는 필요할 때만로드됩니다. 이를 위해 ajax 호출을 통해 다음 코드를 사용하고 있습니다.
$this->renderPartial('_callhistory', array(
'modelCalls'=>$modelCalls,
'fid'=>$fid,
), false, true);
이것은 잘 작동하고 모든 위젯이 작동합니다. 메인 테마의 디자인에 문제를 일으키고 있지만 현재로서는 큰 문제가 아닙니다.
내가 가진 문제는 때때로 ajax를 다시 호출하여보기를 업데이트해야한다는 것입니다. 이렇게하려면 동일한 매개 변수를 사용하여 정확히 동일한 ajax 함수를 호출하고 있지만 두 번째 호출에서 모든 위젯 (즉, 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);
});
}
여기 덕분에 마침내 이것에 대한 답을 찾았습니다.
트릭은 컨트롤러에서 위젯을 렌더링하지만 출력을 다음과 같이 변수로 저장하는 것입니다.
$html = $this->widget( $className, $properties=array ( ), TRUE);
참고 : 마지막 'true'매개 변수를 사용하면 결과를 $html
변수 에 배치 할 수 있습니다 .
그런 다음 클라이언트 스크립트를 사용하여 스크립트를 렌더링합니다.
Yii::app()->getClientScript()->renderBodyBegin($html);
Yii::app()->getClientScript()->renderBodyEnd($html);
그런 다음 변수를 뷰에 전달하고 (renderPartial을 통해 수행합니다) echo $html
위젯이 필요한 곳에 사용 합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다