При совместном использовании mapbox и keystone я получаю неправильные местоположения, показанные на разных страницах - PullRequest
0 голосов
/ 16 мая 2019

Я использую 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"
      }

          })
    })

})
...