2011-08-01 21 views
1

我有一個簡單的gmaps V3 api調用,根據位置記錄中的lat/lon生成靜態地圖。文件reisdes在資產/ JavaScript的目錄,並命名爲location_static_map.erb.js鏈輪在js文件中沒有正確處理erb

下面的代碼:

var location; 
function initialize() { 
    var myOptions = { 
    zoom: 10, 
    mapTypeId: google.maps.MapTypeId.HYBRID 
    }; 
    var map = new google.maps.Map(document.getElementById("location_static_map"), myOptions); 
    var lat = <%= "#{@location.latitude}" %>; 
    var lon = <%= "#{@location.longitude}" %>; 
    location = lat,lon; 
    map.setCenter(location); 
    var marker = new google.maps.Marker({ 
    position: location, 
    map: map, 
    visible: true, 
    draggable: false, 
    title: "Your Location is Here..." 
    }); 
} 

我得到的嵌入代碼ERB語法解析錯誤。請注意,我有其他動態地圖建立在V3 api上工作正常,所以這是一個嵌入式erb評估的問題....還要注意,我已經嘗試過文件擴展名爲.js.erb,假設我處理順序錯誤,但導致「緯度」的未定義方法錯誤,因爲它碰到了erb代碼的第一行......

還要注意解析錯誤發生在生成的application.js中文件

任何輸入讚賞.....

回答

4

這是我的理解是,當你發佈此代碼到生產,你會「編譯」你所有的JS資產爲單一的application.js文件 - 僱員再培訓局b e當時評估並再次不再。在開發中,這不是一個問題,因爲application.js是在每個請求上編譯的。從查看你的代碼我假設你想讓@location的值隨着每個請求而改變,你現在的方法是行不通的。

只要你收到的錯誤,它是一個sprokets解析錯誤或客戶端JavaScript錯誤?當正在處理js.erb時,猜測@location是否爲零?

您可能希望將此代碼包裝到可重用的javascriopt函數/對象中,然後在調用客戶端代碼時在視圖中設置實例變量?這個調用可能看起來像這樣

<script> 
window.App.Locator.initialize('<%= @location.latitude %>', '<%= @location.longitude %>'); 
</script> 

與此代碼視圖本身,再培訓局會在每個請求重新評估,甚至在生產

+0

啊啊啊,想你釘它。爲此我必須自己踢。當然代碼是遵守的。咄! – p2w