これを使用して店舗検索アプリを作成しようとしています tutorial およびLaravel 5.これらの質問の人々 Here および Here は、実行するために@foreachループおよび他のブレードテンプレート言語を使用しているようです緯度/経度座標を使用します。
私のマップコードがjsファイルにあるときに、ブレードを使用して座標をループする方法は基本的にわかりません。そんなことがあるものか?私は何か間違ったことをしていますか?
次のコードを持つjsファイル(maps.js)でマップを表示しています。
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
}
しかし、明らかにそれは@foreach行にとどまります。
PS:誰かがLaravel 5でこのチュートリアルをフォローしているなら、このパートに関する情報に感謝します:PHPでXMLを出力します。
外部Javascriptファイル内でBladeテンプレートを使用する方法はありません。
Laravelはビュー/テンプレートにのみデータを渡すことができます。 Javascriptファイルは外部から読み込まれるため、アプリデータは渡されません。
これを回避するには、Bladeテンプレートファイル内に<script>
タグを作成する必要があります。
{{-- 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>
このスニペットがmaps.js
ファイルを含めるためのコードbeforeになるようにしてください。 maps.js
タグ内に<head>
ファイルを含めた場合、そのインクルードスニペットをページの一番下に移動する必要があります。
ただし、これはかなり初歩的なソリューションです。より良い方法は、AJAX=を使用して、初期化時にmaps.js
ファイル内からデータを取得することです。
もちろん、これには、要求を処理して必要なデータを返すことができる新しいControllerメソッドと対応するルートを作成する必要があります。
JavaScript
オブジェクトからEloquent
オブジェクトを作成できます。たとえば、次のコードを見てください。
// index.blade.php
<script>var userObj = {{ $authUser or 'undefined' }}</script>
これはblade
ビューであり、view
をロードして、このようなものを使用してcollection
をビューに渡しているだけです( view composer を使用して=):
View::composer('layouts.master', function($view) {
$user = null;
if(Auth::check()) {
$user = Auth::user();
}
$view->with('authUser', $user);
});
だから、私のview
で$authUser
ので、次のように簡単にJS
オブジェクトに変換できます。
<script>var userObj = {{ $authUser or 'undefined' }}</script>
これで、JS
変数(JavaScript)にあるuserObj
オブジェクトとして使用できるようになりました。 私のこの記事 ほぼ1年前にLaravel-4
。
提供されたサンプルでは、ブレードファイル内にあり、すべてのJavaScriptがタグの間にあるため、ブレードを使用しています。 .jsファイルタイプではないため、この方法でブレード言語機能を使用できます。