Yii2列表视图缺少来自yii1的$.fn.yiilistview.update
。更重要的是,它依赖于pjax的基本要求,因此使用嵌套的pjax,超时等创建各种问题,以便用listView进行简单的分页。
对控制器的GET请求由javascript呈现为HTML(从包含listview html的控制器返回的jSON)。由于在此过程中未更改URL,因此我没有使用pjax来避免复杂性并进行简单的ajax调用,并且基于成功返回的数据将更新容器。 (就像pjax只手动使用ajax而不更改url)
现在,当我执行下一页时,会更新URL并进行页面完全刷新。最初它不能正常工作但是一旦我在控制器中的页面GET参数上添加了IF检查,而不是在JSON中返回renderAjax输出,现在将直接返回HTML
如何在不使用pjax的情况下避免使用yii2 listview下一页更新URL,并使其能够以时尚方式编写控制器和javascript,以模拟上述手动ajax调用中的pjax?
控制器:
if($pageParam == null) {
$page = $this->renderAjax("_list", [
"dataProvider" => $dataProvider
]) ;
Yii::$app->response->format = 'json';
return array("error"=>false,"page"=>$page);
} else {
return $this->renderAjax("_list", [
"dataProvider" => $dataProvider
]) ;
}
列表视图:
<?php if($dataProvider != null) : ?>
<?=
ListView::widget([
'id'=>'itemList',
'dataProvider' => $dataProvider,
'itemOptions' => ['class' => 'item'],
'itemView' => '_dataListView',
'summary'=>'',
'emptyText'=>$emptyPage
])
?>
<?php endif; ?>
js:
ajax成功GET回调:
success : function(data) {
if(!data.error) {
$("#list-container").html(data.page);
listcontainer
本身位于_list
答案 0 :(得分:2)
您可以像这样配置pjax小部件:
<? Pjax::begin(['enablePushState' => false]) ?>
...
<? Pjax::end() ?>
您可能也对'enableReplaceState'
选项感兴趣。 doc here
答案 1 :(得分:0)
如果没有pjax,我无法想办法 - 所以这里是ajax的解决方案:成功
$("#list-container").html(data.page);
$(document).pjax('a', '#list-container', {push:false});