【发布时间】:2010-12-01 20:42:59
【问题描述】:
在阅读原始答案中提到的资源并努力实施后,我正在修改这个问题。
我正在使用 google maps api 将地图集成到我的 Rails 站点中。我有一个包含以下列的市场模型:ID、名称、地址、lat、lng。
在我的市场/指数视图中,我想用我的市场表中的所有市场填充一张地图。我正在尝试将@markets 输出为 json 数据,这就是我遇到问题的地方。我有显示的基本地图,但现在它只是一张空白地图。我非常密切地关注教程,但我无法让标记从 json 动态生成。非常感谢任何帮助!
这是我的设置:
市场总监:
def index
@markets = Market.filter_city(params[:filter])
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @market}
format.xml { render :xml => @market }
end
end
市场/指数视图:
<head>
<script type="text/javascript"
src="http://www.google.com/jsapi?key=GOOGLE KEY REDACTED, BUT IT'S THERE" >
</script>
<script type="text/javascript">
var markets = <%= @markets.to_json %>;
</script>
<script type="text/javascript" charset="utf-8">
google.load("maps", "2.x");
google.load("jquery", "1.3.2");
</script>
</head>
<body>
<div id="map" style="width:400px; height:300px;"></div>
</body>
公共/javascripts/application.js:
function initialize() {
if (GBrowserIsCompatible() && typeof markets != 'undefined') {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(40.7371, -73.9903), 13);
map.addControl(new GLargeMapControl());
function createMarker(latlng, market) {
var marker = new GMarker(latlng);
var html="<strong>"+market.name+"</strong><br />"+market.address;
GEvent.addListener(marker,"click", function() {
map.openInfoWindowHtml(latlng, html);
});
return marker;
}
var bounds = new GLatLngBounds;
for (var i = 0; i < markets.length; i++) {
var latlng=new GLatLng(markets[i].lat,markets[i].lng)
bounds.extend(latlng);
map.addOverlay(createMarker(latlng, markets[i]));
}
} }
window.onload=initialize;
window.onunload=GUnload;
【问题讨论】:
-
不应该是
@markets而不是format.json { render :json => @market}中的@market吗? -
您不需要在 Markets/index 视图中添加
<script type="text/javascript" src="/javascripts/application.js"></script>吗?
标签: javascript ruby-on-rails ajax json google-maps