Я использую mongodb в сочетании с рулем и mapbox, надеясь создать способ, с помощью которого пользователь-администратор может указать местоположение для определенного сообщения в блоге или что-то в этом роде и передать его через интерфейс.На данный момент у меня настроено mapbox, и администратор может ввести правильную информацию, которая поступает в файл javascript представления страницы блога.Но при переключении на другой пост в блоге, при первой загрузке страницы карта загружается с прежним местоположением.
Итак, проблемы;Вы должны обновить страницу дважды, чтобы получить доступ к данным.Если вы загрузите одну карту с почтовым индексом, на следующей странице блога вы получите предыдущую карту.
route / view / индивидуальный_blog.js
// Load the current post
view.on('init', function (next) {
var q = keystone.list('Exhibition').model.findOne({
state: 'published',
slug: locals.filters.post,
}).populate('author categories');
q.exec(function (err, result) {
locals.data.post = result;
title = result.location.name
console.log(result.location.postcode)
//this always gives the correct
//postcode for each individual page,
//but then somewhere below this, the code fails
geo.geocode('mapbox.places', result.location.postcode, function (err, geoData) {
location = geoData
locals.data.location = geoData
})
// })
next(err);
});
});
// Render the view
view.render('individual_exhibition', {
location: JSON.stringify(location),
title: JSON.stringify(title)
});
файл hbs
<script>
var a = []
var b = []
var d = {{{title}}}
var c = {{{location}}}
b.push(d)
a.push(c)
var collabProjects = []
for(i=0;i<a[0].features.length;i++){
collabProjects.push(a[0].features[i])
}
obj = {
"type":'FeatureCollection',
"features":collabProjects
}
// This adds the map to your page
mapboxgl.accessToken = 'pk.eyJ1Ijoiam9obmRvaTIwMjQiLCJhIjoiY2p1cHlyaWx2MDNqaTN5bnk4MDRweXBudSJ9.K3k37HXcDI5hMP-Y-DgpFA';
// This adds the map to your page
var map = new mapboxgl.Map({
// container id specified in the HTML
container: 'map',
// style URL
style: 'mapbox://styles/mapbox/streets-v9',
// initial position in [lon, lat] format
center: [-3.9206, 56.144],
// initial zoom
zoom: 1
});
map.on("load", function (e) {
map.addLayer({
id: 'collabing',
type: 'circle',
// Add a GeoJSON source containing place coordinates and information.
source: {
type: 'geojson',
data: obj
},
paint: {
"circle-radius": 8,
"circle-color": "#FF0000",
"circle-stroke-width": 2,
"circle-stroke-color": "#FF0000"
}
})
})
})