2013-08-06 46 views
11

我的主頁有一些內嵌JavaScript,與某些刀片式語法混淆,我的JavaScript文件中的Laravel 4刀片語法

<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 ...

+0

是什麼錯誤? –

+0

未捕獲的SyntaxError:意外的令牌ILLEGAL => @if – TechyTimo

+1

這對我來說確實很好。你應該已經做出了答案。我意識到我的主頁變得太混亂的JavaScript。我相信這不會導致額外的請求,因此頁面加載速度是相同的。你爲什麼會推薦它? – TechyTimo

回答

10

你可以試試這個保存您的JavaScript文件在app/views文件夾重命名爲xxx.blade.php,是因爲.blade.php刀片發動機將解析它只有在其.blade.php和使用@include('your javascript filename')包括由刀片解析JavaScript文件,它會工作。

1

你從PHP outputing字符串,所以你必須附上該字符串在'

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

我收到一個錯誤:未捕獲的SyntaxError:意外的令牌ILLEGAL => @if – TechyTimo

+1

該文件的名稱是什麼?它應該被命名爲'whatever.blade.php' – Andreyco

+0

它是一個.blade.php文件,但是當我在@中包含@if語句時,錯誤消失了。像'@if(Auth :: user())'。問題是,刀片式服務器沒有運行 – TechyTimo

41

雖然接受的解決方案將起作用,但這絕對是一種反模式。

如果我看到這不是寫它的人,我會對發生的事情感到非常困惑。

我的建議是在你的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(); 
    }; 
} 
+1

加1爲分離職責,並允許我在必要時縮小我的js –

+1

@BillGarrison,請記住,是的,你可以縮小 - 但你不能混淆,因爲這將改變變量名稱! –

+1

您將如何使用此解決方案並且能夠混淆?可以做到嗎?任何可能允許混淆的技巧,同時保留特定的變量? – Drellgor

3

我是做比@BrandonRomano一樣,但我發現了一個更好的方法。直接從PHP發送值JS乏使用: PHP-Vars-To-Js-Transformer

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)