2017-04-02 37 views
0

Yii2 listview缺少來自yii1的$ .fn.yiilistview.update。更重要的是,它依賴於pjax的基本要求,因此創建了所有與嵌套的pjax,超時等問題,以簡單分頁與listView。yii2 listview next page without url

對控制器的GET請求由javascript呈現爲HTML(從包含listview html的控制器返回的jSON)。由於URL在這個過程中沒有改變,我沒有使用pjax來避免複雜性,並且簡單的調用了ajax,並且基於成功返回的數據將更新容器。 (就像pjax隻手動使用ajax而不改變url)

現在當我做下一頁時,URL更新並且頁面完全刷新。最初它沒有工作,但一旦我添加了一個頁面GET參數內部控制器的IF檢查,而不是返回JSON的renderAjax輸出,現在直接返回HTML

我們如何避免更新網址與yii2 listview下一頁沒有使用pjax,並使它看起來像控制器和javascript寫入時尚模仿pjax手動ajax調用上面所述?

控制器:

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:

阿賈克斯成功GET回調:

success  : function(data) { 
        if(!data.error) { 
         $("#list-container").html(data.page); 

listcontainer本身存在於父視圖_list

回答

0

嗯,想通了,技巧是不要做pjax:begin/pjax:在PHP中結束調用,而是以任何方式在javscript中控制,我用yii手動替換了使用JSON的HTML。

我想不出不pjax一個辦法 - 這裏是Ajax解決方案:成功

$("#list-container").html(data.page); 
$(document).pjax('a', '#list-container', {push:false}); 
1

您可以配置pjax部件是這樣的:

<? Pjax::begin(['enablePushState' => false]) ?> 
... 
    <? Pjax::end() ?> 

您可能也有興趣在'enableReplaceState'選項。 doc here

+0

我在PHP中試過這些。但是我在這裏遇到了一個問題,因爲我正在將renderAjax的輸出返回到用這個輸出替換容器的javascript。 pjax調用在ajax中無法正常工作,但是完全刷新我同意在PHP中執行操作可能不會產生任何問題 – fortm

+0

當我根本不需要pjax,因爲URL不需要更改時,最好的情況就是這樣。但似乎yii2與pjax有深厚的聯繫,我們需要找到解決方法 – fortm

+0

我最近與pjax和yii listview進行的鬥爭是在listview中的尋呼機,一旦以我回答的方式實現(即使用js添加pjax),添加無限滾動在頂部一直沒有工作(當在同一頁上的多個列表視圖 - 基於AJAX)。我正在刪除需要無限滾動的pjax調用,因爲它執行類似於pjax的操作 - 它也需要容器,並附加在替換容器內容的地方。 – fortm