我正在尝试根据用户搜索表单动态更改Gmaps4Rails中的标记。我正在使用下面的代码。
我遇到的问题是在$('#locations_search')。submit中调用Gmaps.map.replaceMarkers会出错:Gmaps.map未定义。
我使用javascript debbuger进行了检查,确实一旦我输入了提交功能(我有一个断点),Gmaps.map是未定义的。当在Gmaps.map.callback的第一行中使用断点停止时,定义了对象Gmaps.map。
可能我错过了一些东西。这似乎是一些可变范围问题?
Gmaps.map.callback = function() {
var firstMarker = Gmaps.map.markers[0];
var map = Gmaps.map.map;
firstMarker.infowindow.open(map, firstMarker.serviceObject);
$('#locations_search').submit(function () {
var url = '/locations.json/?' + $(this).serialize();
$.getJSON(url, function(data){
Gmaps.map.replaceMarkers(data);
});
$.get(this.action, $(this).serialize(), null, 'script');
return false;
});
}
非常感谢!
答案 0 :(得分:0)
这只是一个脚本顺序的问题。
Gmaps.map
在您的视图中创建时
您可以拨打gmaps
或gmaps4rails
个助手。
解决方案:
在之后添加您的脚本给宝石的帮助
将您的js代码包装在<% content_for :scripts do %> code <% end %>
:
<%= gmaps(...) %>
<% content_for :scripts do %>
<script type="text/javascript">
Gmaps.map.callback = function() { ... }
</script>
<% end %>
Gmaps.map.callback = function() {
var namespace = Gmaps.map;
var firstMarker = namespace.markers[0];
var map = namespace.map;
firstMarker.infowindow.open(map, firstMarker.serviceObject);
$('#locations_search').submit(function () {
var url = '/locations.json/?' + $(this).serialize();
$.getJSON(url, function(data){
namespace.replaceMarkers(data);
});
$.get(this.action, $(this).serialize(), null, 'script');
return false;
});
}