2016-03-17 129 views
0

我從頭開始構建我的第一個lavavel網站,並且遇到了幾條路線的行爲問題。Laravel與PJAX的路由行爲不像預期的那樣

這裏是我的路線相關的代碼文件:

Route::get('work', '[email protected]'); 
Route::get('work/{item}', '[email protected]'); 

這裏是相關方法:

public function work() { 
     return view('pages.work'); 
    } 

    public function workitem($item) { 
     $v = 'work.'.$item; 
     if(view()->exists($v)) { 
      return view($v); 
     } else { 
      return view('errors.noitem'); 
     } 
    } 

,這裏是我的觀點的相關部分:

@extends('layout') 

@section('content') 
... 
<div class="workflex"> 
    <a class="workitem" href="/work/test"></a> 
    <a class="workitem" href="/work/test2"></a> 
</div> 
<div id="loadContent" class="loadContent"> 
    @yield('insert') 
</div> 
... 
@stop 

值得一提的是,我打算使用PJAX加載單個工作項目頁面。我有意見認爲,PJAX加載到「插入」部分基於URL:

$(document).pjax('a.workitem', '#loadContent'); 

用戶加載初始工作頁面的/工作子目錄,然後點擊一個按鈕加載/工作/項目頁與PJAX。如路線所示,我還希望用戶能夠在URL中輸入工作項目並將其定向到已加載該項目的工作頁面。這整個系統表現爲預期的...直到我增加了以下jQuery來work.blade.php:

$(document).ready(function() { 
     $('#loadContent').load("/work/init", function() { 
      myFade('#loadContent > *', 1); //ignore this function, it's an animation irrelevant to my problem 
     }); 
    }); 

這是在這裏爲試圖加載初始消息PJAX裝載DIV #loadContent裏面告訴用戶選擇一個工作項目。然而,這樣做的副作用是,現在無論何時直接瀏覽到/ work/item(PJAX仍然正確加載頁面),該文檔都會觸發此jquery,並且該消息會覆蓋頁面內容。

我是集思廣益的方式,允許我的控制器中的work()方法觸發加載此腳本或僅將工作/ init視圖傳遞到「插入」部分的內容。

您認爲最好的解決方法是什麼?非常感謝您的回答。

回答

0

我能回答我自己的問題。我忘記了路由可選參數。我改變/添加的這些東西:

Route::get('work/{item?}', '[email protected]'); 

,並在我的控制器:

public function work($item = 'init') { 
     $v = 'work.'.$item; 
     if(view()->exists($v)) { 
      return view($v); 
     } else { 
      return view('errors.noitem'); 
     } 
    } 

完美的作品吧!