为了改善初始页面加载,我正在创建的页面上的大部分内容仅在需要时加载。为此,我通过 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);
});
}