2013-08-06 5 views
11

Moja strona główna zawierała trochę wbudowanego javascriptu, który został pomieszany z pewną składnią ostrza, np.Składnia Laravel 4 blade w plikach javascript

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

Działa, dopóki nie chciałem przenieść javascript do zewnętrznego file.js. Wystąpił błąd, gdy dodano składnię brzeszczotu. Czy istnieje sposób, w jaki mogę połączyć składnię ostrzy w moim javascript files.js? Próbowałem zmiany nazwy do file.blade.js bez powodzenia ...

+0

co było błąd? –

+0

Uncaught SyntaxError: Niespodziewany token ILLEGAL => @if – TechyTimo

+1

To naprawdę działa dobrze dla mnie. Powinieneś był to zrobić. Zdałem sobie sprawę, że moja strona domowa jest zbyt zaśmiecona javascript. Wierzę, że nie spowoduje to dodatkowego żądania, stąd szybkość ładowania strony jest taka sama. Dlaczego miałbyś polecać przeciwko niemu? – TechyTimo

Odpowiedz

10

można spróbować zapisać plik JavaScript w app/views folderu i zmień jego nazwę na xxx.blade.php, tak .blade.php ponieważ Blade Silnik będzie je analizować tylko jeśli jego .blade.php i używać @include('your javascript filename') dołączyć plik javascript analizowany przez Blade, to będzie działać.

1

Jesteś outputing ciąg z PHP, więc trzeba zamknąć ten ciąg w '

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

Otrzymuję błąd: Uncaught SyntaxError: nieoczekiwany token ILLEGAL => @if – TechyTimo

+1

Jaka jest nazwa pliku? Powinien on mieć nazwę 'whatever.blade.php'. – Andreyco

+0

Jest to plik .blade.php, ale błąd zniknął, gdy dołączyłem do instrukcji @if również. na przykład "@if (Auth :: user())".Problem polega na tym, że php nie działał – TechyTimo

41

Mimo że przyjęte rozwiązanie zadziała, jest to zdecydowanie antypatia.

Gdybym zobaczył, że to nie ten, który to napisał, byłbym bardzo zmieszany z tym, co się dzieje.

Moja sugestia znajduje się w twoim pliku PHP, posiada blok, który pobiera wszystkie wartości, które będziesz potrzebować w plikach zewnętrznych, a następnie wywoła pliki zewnętrzne.

Więc w pliku PHP można mieć coś takiego:

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

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

aw pliku javascript:

if(isUser) 
{ 
    if(path.indexOf('/user/' + userID) != -1) { 
     $("#tabs").tabs(); 
    }; 
} 
+1

plus 1 dla oddzielnych obowiązków i pozwalając mi na minyfikację mojego js, ​​jeśli to konieczne –

+1

@BillGarrison, pamiętaj, że tak, możesz zminimalizować - ale nie możesz się zamaskować, ponieważ to zmieni nazwy zmiennych ! –

+1

W jaki sposób skorzystasz z tego rozwiązania, a także będziesz w stanie je zaciemnić? Czy można to zrobić? Wszelkie sztuczki, które mogą pozwalać na zaciemnianie przy zachowaniu określonych zmiennych? – Drellgor

3

robiłem to samo niż @BrandonRomano, ale znalazłem lepsze podejście . Wysyłanie bezpośrednio wartość z PHP do JS Vars używając: 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 

Można ustawić nazw jak:

console.log(server.foo)