使用PJAX的Laravel路由行为与预期不符

时间:2016-03-17 06:25:27

标签: javascript php jquery laravel pjax

我正在从头开始构建我的第一个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”部分。

您认为解决此问题的最佳方法是什么?非常感谢您的回答。

1 个答案:

答案 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');
        }
    }

现在完美运作!