【发布时间】:2018-04-05 17:58:42
【问题描述】:
所以我有一些用户正在填写一个位置的纬度和经度。它们分别存储在 lat 和 lng 下的 Location 下。现在我在我的 JS 文件中使用以下代码对其进行了硬编码:
const markersByRegion = {
iowa: [{
position: [39.988705, -86.061112],
title: "Cedar Rapids"
}]};
app.regions = () => {
function init() {
startGoogleMap();
}
let startGoogleMap = () => {
let map = new google.maps.Map(document.getElementById("region-banner"), {
zoom: 3,
minZoom: 3,
disableDefaultUI: true,
gestureHandling: "cooperative",
styles: mapStyle
});
var mapElement = document.getElementById("region-banner");
const regionName = mapElement.getAttribute('data-region-name')
let bounds = new google.maps.LatLngBounds();
markersByRegion[regionName].forEach(({ position, ...opts }) => {
const marker = new google.maps.Marker({
...opts,
position: new google.maps.LatLng(...position),
map
});
bounds.extend(marker.position);
});
在我的地区 > 显示文件我有以下内容:
<div class="container-fluid">
<div class="row">
<div class="banner" id="region-banner" data-region-name="<%=@region.name.downcase%>">
<script>document.addEventListener('DOMContentLoaded', app.regions);</script>
我想要做的是根据用户输入使这个动态化,并根据输入分配标记。
编辑: 所以我尝试了,但失败了,用类似的东西替换变量:
const markersByRegion = {
<%=Region.name%>: [{
position: [<%=Location.lat%>, <%=Location.lng%>],
title: '<%=Location.name%>'
}]
这会导致控制台中出现 Uncaught Error: Module build failed: SyntaxError: Unexpected token (5:4) 错误。我也尝试将数据属性放在我的区域显示页面中以提取数据,但我遇到了麻烦。
然后我决定在我的位置控制器中进行更改:
def marker
@locations = Location.all
respond_to do |format|
format.json { render json: @locations }
format.html
end
end
然后将我的区域 JS 文件更新为:
import { mapStyle } from './styles/mapStyle';
app.regions = () => {
function init() {
startGoogleMap();
}
let startGoogleMap = () => {
let map = new google.maps.Map(document.getElementById('region-banner'), {
zoom: 3,
minZoom: 3,
disableDefaultUI: true,
gestureHandling: 'cooperative',
styles: mapStyle
});
var mapElement = document.getElementById('region-banner');
const regionName = mapElement.getAttribute('data-region-name');
let bounds = new google.maps.LatLngBounds();
var promise = $.getJSON('/locations.json');
promise.done(function(data) {
return $.each(data, function() {
return new google.maps.Marker({
position: { lat: data.lat, lng: data.lng },
map: map
// ...
});
});
});
所以我现在进入控制台:setPosition: not a LatLng or LatLngLiteral: in property lat: not a number
我认为我可以通过将 parseFloat 放在 lat 和 lng 前面来解决这个问题,但这只会导致不同的错误:Module build failed: SyntaxError: Unexpected token, expected,.
我最终要做的是,当用户使用他们在 Location 模型下输入的纬度和经度记录位置时,它会在区域页面上动态更新。
【问题讨论】:
标签: javascript ruby-on-rails google-maps