我无法弄清楚为什么我们的ruby代码没有在coffeescript中呈现。最终,我们正在努力在Google地图视图中绘制存储在Rails模型中的一系列标记。因为我们遇到了循环问题,所以我们试图让一个测试变量在一个警报中呈现;它不起作用。弹出警报,但只显示 Hello ,而不是 Hello 5 (或 Hello“5”?)
这是我们的coffeescript文件(locations.coffee.erb)
$ ->
alert "Hello <%= @test %>"
latlng = new google.maps.LatLng(43.0, -107.0);
myOptions =
zoom: 5,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
point = new google.maps.LatLng(43.0, -107.0);
marker = new google.maps.Marker({
position: point,
map: map,
title: "Test",
});
@test在#map中定义,位于locations_controller.rb:
的底部class LocationsController < ApplicationController
def show
@traveling_party = TravelingParty.find_by_id(session[:party])
@location = Location.where("position >= #{@traveling_party.position}").order("position ASC").first
end
def move
f = params[:traveling_party]
@traveling_party = TravelingParty.find(f["id"])
@traveling_party.speed = f["speed"].to_i
@traveling_party.ration = f["ration"].to_i
@location = Location.where("position > #{@traveling_party.position}").order("position ASC").first
@traveling_party.position += @traveling_party.speed
if @traveling_party.position > @location.position
@traveling_party.position = @location.position
end
food_eaten = @traveling_party.ration * @traveling_party.people
Item.where({:trader_id => @traveling_party.id, :type => "Food"}).limit(food_eaten).destroy_all()
if @traveling_party.save()
flash[:notice] = "Successfully updated traveling party."
redirect_to '/play/'
else
flash[:error] = "Transaction could not be completed."
redirect_to '/play/'
end
end
def map
@traveling_party = TravelingParty.find_by_id(session[:party])
@locations = Location.all
@test = "5"
end
end
我觉得奇怪的是@test在map.html.erb视图中正确呈现。正如预期的那样,地图上方印有5个:
<% @locations.each do |loc| %>
<% end %>
<div id="map_canvas">Random</div>
答案 0 :(得分:1)
该文件确实通过ERB运行,但只运行一次 - 当应用程序预编译资产时。这不是你可以很容易改变的事情,你可能不应该尝试。
您可以做的是获取您想要通过AJAX JSON请求单独填充的实际数据,或者可以将其作为Javascript嵌入到您的页面模板中。
静态(CSS + JS)文件的ERB编译通常用于放入不随每个请求更改的环境特定数据。