@4itosik

Rails 4 + turbolins + yandex map, Как сделать чтоб карта загружалась и с turbolinks?

Собвственно вопрос в заголовке, сейчас карта работает если перезагрузить страницу, пробывал использовать:

$(document).ready(ready)
$(document).on('page:load', ready)
$(document).on('page:update', ready)


но тогда 2 карты грузятся (
var ready = ymaps.ready(init);
var myMap, myPlacemark;

function init(){

var myGeocoder = ymaps.geocode('#{@user.full_address}');
myGeocoder.then(
function (res) {
var coords = res.geoObjects.get(0).geometry.getCoordinates();
myPlacemark = new ymaps.Placemark(coords, {
hintContent: '#{@user.show_nickname}',
balloonContent: '#{@user.show_nickname}; Телефон: #{@user.show_phone};'
});
myMap = new ymaps.Map("map", {
center: coords,
zoom: 15
});
myMap.geoObjects.add(myPlacemark);
});
}


Вот сам код, который инициализирует карту
  • Вопрос задан
  • 1270 просмотров
Решения вопроса 1
@elikru
ymaps.coffee:

window.ya_init = ->
  $('.ymap').not('.done').addClass('done').each ->
    $m = $(this)
    ymaps.geocode($m.data('address'), {results: 1}).then (res) ->
      firstGeoObject = res.geoObjects.get(0)
      coords = firstGeoObject.geometry.getCoordinates()
      map = new ymaps.Map($m[0],
        center: coords
        zoom: 15,
        behaviors: ['default'] #, 'scrollZoom']
      )
      map.controls.add('zoomControl', { left: 5, top: 5 })
      myPlacemark = new ymaps.Placemark(coords)
      map.geoObjects.add(myPlacemark)

$ ->
  return if $('.ymap').not('.done').length == 0
  if window.ymaps
    ya_init()
  else
    $.getScript( "//api-maps.yandex.ru/2.1/?load=package.full&lang=ru-RU&onload=ya_init")


somepage.html.slim:
.ymap data-address="Москва, Кремль"

Подсмотрел в rocket_cms
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Jeiwan
@Jeiwan
Выкинуть нахрен turbolinks. Преждевременная оптимизация — зло.
Ответ написан
@gorborukov
web developer
Привет из 2018

после кода инициализации карты:
document.addEventListener("turbolinks:before-cache", function() {
    myMap.destroy();
})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы