2011-10-31 37 views
1

我无法搞清楚为什么我们的ruby代码不能在coffeescript中呈现。最终,我们正在努力在Google地图视图中绘制存储在Rails模型中的一系列标记。因为我们在循环中遇到了问题,所以我们尝试获取一个测试变量以在警报中呈现;它不工作。警报弹出,但它说,只有你好,不你好5(或你好 “5”?)erb不会在coffeescript文件中呈现

这是我们的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

你的'locations.coffee.erb'文件在哪里?如果它在'资产'中,那么它只会被处理一次,并且目前没有您当前请求的上下文......所以您的ERB对您的外推并不了解。 – Romain

+0

使用gmaps4rails :) – apneadiving

+0

@Romain - locations.coffee.erb位于assets/javascripts中。如果我们将javascript放在map.html.erb中并彻底清除locations.coffee.erb,我们是否可以解决这个问题? – jmaliakal

回答

1

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

您可以改为通过AJAX JSON请求单独获取要分别填充的实际数据,也可以将其嵌入为页面模板中的Javascript。

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