Comment utiliser Laravel Blade dans un fichier script?

j'essaye de faire une application de localisateur de magasin en utilisant ceci tutoriel et Laravel 5. Les gens dans ces questions!--4-->Ici et Ici semblent être à l'aide de @boucles foreach et d'autre de la lame de création de modèles de langage à exécuter par le biais de leurs coordonnées lat/long. Comment font-ils cela?

En Gros, Je ne sais pas comment faire une boucle à travers les coordonnées en utilisant blade quand mon code est dans un fichier js? Comment est-ce possible? Est-ce que je fais quelque chose totalement de mal?

je montre ma carte avec un fichier js (maps.js) qui a le code suivant:

function initialize() {

var map_canvas = document.getElementById('map');

// Initialise the map
var map_options = {
    center: location,
    zoom: 10,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(map_canvas, map_options)

// Put all locations into array
var locations = [
@foreach ($articles as $article)
    [ {{ $article->lat }}, {{ $article->lng }} ]     
@endforeach
];

for (i = 0; i < locations.length; i++) {
    var location = new google.maps.LatLng(locations[i][0], locations[i][1]);

    var marker = new google.maps.Marker({
        position: location,
        map: map,
    }); 
}

// marker.setMap(map); // Probably not necessary since you set the map above

}

mais évidemment cela se bloque sur la ligne @foreach.

PS: Si Quelqu'un a suivi ce tutoriel avec Laravel 5, je serais reconnaissant pour toute information sur cette partie: outputing XML avec PHP.

10
demandé sur Community 2015-11-03 04:24:12

3 réponses

il n'y a aucun moyen d'utiliser Blade templating dans un fichier Javascript externe.

Laravel ne peut transmettre des données qu'à une vue/template; les fichiers Javascript sont chargés à l'extérieur et les données App ne leur sont donc pas transmises.

pour contourner cela, vous devez créer <script> les balises à l'intérieur de votre Lame de fichier de modèle:

{{-- Code in your template file, e.g., view.blade.php --}}

<script type="text/javascript">

// Put all locations into array
var locations = [
@foreach ($articles as $article)
    [ "{{ $article->lat }}", "{{ $article->lng }}" ], 
@endforeach
];

// NOTE: I've added a comma which will be needed to delimit each array within the array.
//       Quotes will also be needed since lat and long are not integers.

</script>

assurez-vous que ce morceau vient avant le code pour inclure votre maps.js fichier. Si vous avez inclus le maps.js le fichier à l'intérieur de votre <head> tags, vous allez avoir besoin de se déplacer à l'intégration extrait de vers le bas de la page.

il s'agit toutefois d'une solution plutôt rudimentaire. Une meilleure façon serait D'utiliser AJAX pour récupérer les données à l'intérieur de votre maps.js le fichier lors de l'initialisation.

cela nécessiterait, bien sûr, de créer une nouvelle méthode de Controller et la route correspondante qui peut gérer la requête et retourner le nécessaire données.

22
répondu heisian 2015-11-03 02:34:33

Vous pouvez créer un JavaScript objet de l' Eloquent objet, par exemple, regardons le code suivant:

// index.blade.php
<script>var userObj = {{ $authUser or 'undefined' }}</script>

C'est un blade vue et je suis juste de chargement view et en passant le collection à la vue en utilisant quelque chose comme ceci (en utilisant un view composer):

View::composer('layouts.master', function($view) {
    $user = null;
    if(Auth::check()) {
        $user = Auth::user();
    }
    $view->with('authUser', $user);
});

Donc, dans mon view j'ai $authUser donc, je peux le convertir en JS objet facilement de la forme:

<script>var userObj = {{ $authUser or 'undefined' }}</script>

Alors maintenant, je peux l'utiliser comme un JS objet qui est dans userObj variable (JavaScript). Vérifier cet article de la mine que j'ai écrit près d'un an pour Laravel-4.

1
répondu The Alpha 2015-11-03 01:44:13

dans les échantillons que vous avez fournis, ils utilisent blade parce qu'ils sont dans un fichier blade, et tout JavaScript est entre les tags. Ce n'est pas un .js filetype, vous pouvez donc utiliser les fonctionnalités de blade language de cette façon.

1
répondu James 2015-11-03 01:48:12