在Laravel中返回javascript视图

时间:2017-03-29 12:18:58

标签: php laravel laravel-5

在Ruby on Rails中在我的控制器中,我可以这样做:

$.fn.select2.defaults.set("templateResult", function(item, li) {
  if (item && item.element && item.element.className.length) {
    $(li).addClass(item.element.className);
  }
  return item.text;
}

这将从相关的视图目录

返回jstest.js.erb

jstest.js.erb

def jstest
    respond_to do |format|
        format.js
    end
end

结果是我得到了世界警告。

我想在Laravel中做同样的事情

在我的控制器中我有:

alert("Hello World")

在我看来(我用jstest.blade.js和jstest.js试过)

但是我收到了错误,找不到视图。

我实现此功能的唯一方法是调用视图jstest.blade.php并将此js包含在此php文件中的public function jstest( ) { return view('jstest'); } 标记中。但这感觉有点不对劲......?

这在Laravel中甚至可能吗?如果是的话,我哪里错了?

示例用例:

想象一下下面的例子,我有一个评论表,用户可以点击一个删除按钮,它会发送一个删除评论的ajax请求。

我的路线:

<script>

在我的控制器中:

Route::delete('post/comments/{comment}','commentsController@delete');

commentDeleted.js:

Public Function delete($comment)
{
    $comment->delete();

    return commentDeleted.js
}

因此,从用户的角度来看,他们点击删除,评论会从屏幕上消失,而不会加载新页面。

1 个答案:

答案 0 :(得分:0)

我不知道Laravel是否支持开箱即用,但这是我对你的问题的看法。

这就是我理解你的问题的方法:你想指定一个.js文件的路径作为函数的参数,你希望这个.js文件在通过浏览器加载时立即执行。 / p>

我会在这两个步骤中完成

  1. 创建一个接受路径的jsview()函数,类似于view()
  2. 创建将由上述
  3. 使用的基本.blade.php文件

    .blade.php内容

    假设此视图将命名为javascript.blade.php,并且位于resources/views/目录中。

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <script type="text/javascript" src="{{$path}}"></script>
        </head>
    
        <body></body>
    
    </html>
    

    功能

    function jsview($path)
    {
        return view('javascript', ['path' => $path]);
    }
    

    用法

    <?php
    
    Route::get('/test', function()
    {
        return jsview('/assets/my.js');
    });
    

    这个答案并不是真正完整,因为您的浏览器将从public/目录加载文件,因此您可以从那里读取以这种方式指定的所有.js文件。我相信Laravel确实有一些与资源有关的东西,但我在这方面不够专业。

    这张贴只是为了概述如何实现您需要的东西,但不是开箱即用。