2011-12-25 3 views
1

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

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

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

Предположим, я добавляю новую историю, которая соответствует моим параметрам поиска. Мои истории # создать действие устанавливает @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": "<%[email protected]%>", "lat": "<%[email protected] %>"}]); Но я предпочел бы использовать помощник to_gmaps4rails.

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

ответ

0

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

Gmaps.map.addMarkers(@marker); 

С:

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

Я видел этот ответ и подумал, конечно. , , как глупо со мной. К сожалению, у меня все еще возникают проблемы с escape-символами, сгенерированными ответом, и надеюсь, что вы можете мне помочь. Если я использую ответ, мой пост-запрос возвращает всевозможные escape-символы в js (например, «Gmaps.map.addMarkers [{" описание ": ...»). Я приближаюсь, когда использую «Gmaps.map.addMarkers <% = raw escape_javascript @markers%>; ", но у меня все еще есть обратная косая черта в json. (например, Gmaps.map.addMarkers [{\ "description \":.....) Как я могу сделать это правильно? –

+0

просто попробовал, а просто: '<% = raw @json%>' отображает действительный json. – apneadiving