erb不会在coffeescript文件中呈现

时间:2011-10-31 16:49:29

标签: ruby-on-rails coffeescript erb

我无法弄清楚为什么我们的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>

1 个答案:

答案 0 :(得分:1)

该文件确实通过ERB运行,但只运行一次 - 当应用程序预编译资产时。这不是你可以很容易改变的事情,你可能不应该尝试。

您可以做的是获取您想要通过AJAX JSON请求单独填充的实际数据,或者可以将其作为Javascript嵌入到您的页面模板中。

静态(CSS + JS)文件的ERB编译通常用于放入不随每个请求更改的环境特定数据。