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 に答える
3

私は@BrandonRomanoと同じことをしていましたが、より良いアプローチを見つけました。PHP-Vars-To-Js-Transformer を使用して、PHP から JS vars に値を直接送信する

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 に答える