我想知道如何从我的模型中获取ID字段以传递我在单击标记时调用的JavaScript。
我的模特:
acts_as_gmappable :process_geocoding => false, :lat => "lat", :lng => "lon"
我的控制器
def index
@locales_markers = Locale.all.to_gmaps4rails
respond_to do |format|
format.html { render :layout => false }
end
end
我的观点
<%= gmaps("markers" => { "data" => @locales_markers } %>
<% content_for :scripts do %>
<script>
Gmaps4Rails.callback = function() {
for (var i = 0; i < this.markers.length; ++i) {
google.maps.event.addListener(Gmaps4Rails.markers[i].serviceObject, 'click', function(){
$('#info').load('/messages/' **<HERE I'D LIKE TO PASS THE ID>**);
$('#info').dialog("open");
});
}
};
</script>
<% end %>
谢谢, 卢西亚诺
答案 0 :(得分:1)
我将控制器更改为:
def index
@locales_markers = Locale.all.to_gmaps4rails do |locale|
"\"id\": \"#{locale.id}\""
end
respond_to do |format|
format.html { render :layout => false }
end
end
并且工作正常,但是,我无法在视图中获取id值。
如何解决?
谢谢, 卢西亚诺
答案 1 :(得分:1)
每个标记属性都已存储并可以检索。
在您的示例中,只需执行以下操作:
$('#info').load('/messages/' + Gmaps4Rails.markers[i].id );
编辑:
您应该创建另一个js函数:
custom_listener = function(the_id) {
return function(){
$('#info').load('/messages/' + the_id );
$('#info').dialog("open");
};
};
并以这种方式称呼它:
Gmaps4Rails.callback = function() {
for (var i = 0; i < this.markers.length; ++i) {
google.maps.event.addListener(Gmaps4Rails.markers[i].serviceObject, 'click', custom_listener(Gmaps4Rails.markers[i].id));
}
};