yii1 中缺少 Yii2 列表视图$.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
]) ;
}
Run Code Online (Sandbox Code Playgroud)
列表显示 :
<?php if($dataProvider != null) : ?>
<?=
ListView::widget([
'id'=>'itemList',
'dataProvider' => $dataProvider,
'itemOptions' => ['class' => 'item'],
'itemView' => '_dataListView',
'summary'=>'',
'emptyText'=>$emptyPage
])
?>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)
js:
ajax 成功 GET 回调:
success : function(data) {
if(!data.error) {
$("#list-container").html(data.page);
Run Code Online (Sandbox Code Playgroud)
listcontainer 本身驻留在父视图中 _list
您可以像这样配置 pjax 小部件:
<? Pjax::begin(['enablePushState' => false]) ?>
...
<? Pjax::end() ?>
Run Code Online (Sandbox Code Playgroud)
您可能也对该'enableReplaceState'选项感兴趣。文档在这里
| 归档时间: |
|
| 查看次数: |
3790 次 |
| 最近记录: |