大家好,这是一个 Laravel 问题。我正在开发一个目录网站。我正在尝试解决这样的问题:我需要使用作为 JavaScript 变量处理的标记填充开放街道 map ,如下所示:
var mapMarkers = [
{
title: "Paolo",
address: "Troy South End, 264 E. Berkley St, Boston",
lat: 42.3432809,
lng: -71.06297789999996,
img: "assets/images/listings/1.jpg",
category: "Restaurants",
icon: "icon-dinner",
featText: "~ $18-$90",
rating: "4.9",
link: "#"
},
{
title: "Paolo",
address: "5347 N Clark St, Chicago, IL",
lat: 41.9794495,
lng: -87.6679747,
img: "assets/images/listings/2.jpg",
category: "Restaurants",
icon: "icon-dinner",
featText: "Best fried chicken of the town",
rating: "4.2",
link: "#"
},
{
title: "Paolo",
address: "171 E Broadway, New York, NY",
lat: 40.7138292,
lng: -73.98966669999999,
img: "assets/images/listings/5.jpg",
category: "Restaurants",
icon: "icon-dinner",
featText: "Promotional Lunch $45",
rating: "4.1",
link: "#"
}
];
问题是我在 Laravel 集合中有这些数据,我正在寻找将它们传递给 javascript 的最佳方法:
var mapMarkers = [
{
title: $companies->name,
address: $companies->address,
............
},
有人可以帮助了解解决此问题的最佳实践吗?
最佳答案
与 Eloquent 对象类似,可以通过调用 toJson()
方法将集合序列化为 JSON(Javascript 对象)。因此,$companies->toJson()
应该可以满足您的需求。
在 Blade 模板中,您可以“打印”出公司的 json 格式,如下所示:
<script>
var mapMarkers = {!! $companies->toJson() !!};
</script>
所以,现在当您在 JavaScript 代码中使用 mapMarkers 时,就像在 PHP 中使用 $companies
集合一样。
看起来您的字段也不匹配(示例中的 title: $companies->name
)。要使返回的 json 包含 title
而不是 name
,您可以映射所有公司,并将 title 字段设置为公司名称。这样,上面的示例将如下所示:
<script>
var mapMarkers = {!! $companies->map(function ($company) { $company->title = $company->name; return $company; })->toJson() !!};
</script>
对集合进行映射会使用映射回调函数返回的值创建一个新集合。
关于javascript - 将数据从 Laravel $collection 传递到 jquery 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46305110/