我正在从头开始构建我的第一个lavavel网站,并且我遇到了一些行为问题,并且有几条路线。
以下是我的路线文件的相关代码:
Route::get('work', 'PageController@work');
Route::get('work/{item}', 'PageController@workitem');
以下是相关方法:
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');
用户在/ work子目录中加载初始工作页面,然后单击按钮以使用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()方法触发加载此脚本的内容或仅将work / init视图传递到“insert”部分。
您认为解决此问题的最佳方法是什么?非常感谢您的回答。
答案 0 :(得分:0)
我能够回答我自己的问题。我忘记了路线可选参数。我改变/添加了这些东西:
Route::get('work/{item?}', 'PageController@work');
并在我的控制器中:
public function work($item = 'init') {
$v = 'work.'.$item;
if(view()->exists($v)) {
return view($v);
} else {
return view('errors.noitem');
}
}
现在完美运作!