addMarkers (@marker) не работает для динамического контента - PullRequest
1 голос
/ 25 декабря 2011

Я относительный нуб, но мне было весело интегрировать gmaps4rails в мой проект. Я столкнулся с проблемой, которая может быть ошибкой в ​​драгоценном камне, или это может быть просто мое невежество, но я надеюсь, что кто-то может указать мне правильное направление.

У меня есть домашняя страница с элементом пользовательского интерфейса jquery tab. Одна вкладка содержит представление списка историй, а вторая - отображение этих историй на карте. Я использую gmaps4rails в представлении карты.

На странице перезагрузите все истории, которые соответствуют моим критериям поиска, появляются в моем списке и карте, как и ожидалось. Мои проблемы возникают, когда я пытаюсь использовать Gmaps.map.addMarkers ().

Допустим, я добавляю новую историю, которая соответствует моим параметрам поиска. Действие моих историй # create устанавливает переменную @story, как и ожидалось, а затем я устанавливаю переменную @marker следующим образом:

@markers = @story.to_gmaps4rails

Затем мое представление create.js.erb вставляет @story соответствующим образом в представление моей вкладки списка. К сожалению, Gmaps.map.addMarkers (@marker) не вставляет маркер в представление вкладки карты.

Вот еще один соответствующий код:

story.rb:

class Story < ActiveRecord::Base

  acts_as_api
  acts_as_gmappable :process_geocoding => false

  def gmaps4rails_marker_picture
    {
      "rich_marker" => "<div class='story_marker' id=marker_for_story_#{self.id }  ><img height='30' width='30' src='http://farm4.static.flickr.com/3212/3012579547_097e27ced9_m.jpg'/></div>"
    }
  end

create.js.erb:

$("#stories_list").prepend("<%=raw escape_javascript(render(@story)) %>");  //put new story in list view
<%= logger.debug("!!!!!!!!!! gmaps json array: #{@marker}")%> 
Gmaps.map.addMarkers(@marker); 

home.html.erb:

<div id="map-tab">
    <%= yield :head %>  <!-- for gmaps4rails -->
    <%= gmaps("markers" => { "data" => @json, "options" => { "clusterer_gridSize" => 5, "clusterer_maxZoom" => 13 } }) %>
</div>

Когда я проверяю консоль после вызова create.js.erb, я вижу, что @marker содержит правильную информацию массива json. Я могу скопировать эту информацию прямо из консоли, а затем использовать консоль firebug для запуска addMarkers (скопированная информация о массиве json), и маркер отобразится, как и ожидалось. Кроме того, я могу изменить команду addMarkers в моем файле create.js.erb, чтобы она выглядела следующим образом, что также работает: Gmaps.map.addMarkers([{"lng": "<%=@story.longitude%>", "lat": "<%=@story.latitude %>"}]); Но я бы лучше использовал помощник to_gmaps4rails.

Спасибо за любую помощь, которую вы можете дать мне, чтобы разгадать эту тайну, и счастливых праздников!

1 Ответ

0 голосов
/ 25 декабря 2011

Я думаю, вы должны просто заменить:

Gmaps.map.addMarkers(@marker); 

С:

Gmaps.map.addMarkers(<%= @marker %>); 
...