12

我的主页有一些与刀片语法混合的内联 javascript,例如

    <script type="text/javascript">
        @if(Auth::user())
            if(path.indexOf('/user/' + {{Auth::user()->id}} ) != -1) {
                    $( "#tabs" ).tabs();
            };
        @endif
    </script>

它一直有效,直到我想将 javascript 移动到外部 file.js。每当添加刀片语法时,我都会出错。有没有办法可以在我的 javascript files.js 中融合刀片语法?我尝试重命名为 file.blade.js 没有运气......

4

4 回答 4

42

尽管公认的解决方案会起作用,但这绝对是一种反模式。

如果我看到这不是写它的人,我会对发生的事情感到非常困惑。

我的建议是在你的 PHP 文件中,有一个块,它获取你在外部文件中需要的所有值,然后调用外部文件。

因此,在您的 PHP 文件中,您将拥有如下内容:

<script>
    var userID = "{{ Auth::user()->id }}";
    var isUser = "{{ Auth::user() }}"
</script>

{{ HTML::script('path/to/js/file.js') }}

在你的 javascript 文件中:

if(isUser)
{
    if(path.indexOf('/user/' + userID ) != -1) {
        $( "#tabs" ).tabs();
    };
}
于 2014-03-03T20:53:23.303 回答
10

您可以尝试将您的 javascript 文件保存在app/views文件夹中并将其重命名为xxx.blade.php,是的,.blade.php因为Blade Engine将仅在其解析它.blade.php并用于包含Blade 解析@include('your javascript filename')的 javascript 文件时,它将起作用。

于 2013-08-06T10:48:49.490 回答
3

我的做法与@BrandonRomano 相同,但我找到了更好的方法。使用PHP-Vars-To-Js-Transformer将值从 PHP 直接发送到 JS 变量

PHP:

JavaScript::put([
    'foo' => 'bar',
    'user' => User::first(),
    'age' => 29
]);

JS:

console.log(foo); // bar
console.log(user); // User Obj
console.log(age); // 29

您可以设置一个命名空间,如:

console.log(server.foo)
于 2016-02-25T20:03:35.717 回答
1

您正在从 PHP 输出字符串,因此您必须将该字符串包含在'

<script type="text/javascript">
    @if(Auth::user())
        if(path.indexOf('/user/' + '{{Auth::user()->id}}' ) != -1) {
                $( "#tabs" ).tabs();
        };
    @endif
</script>
于 2013-08-06T08:11:29.050 回答