2016-05-13 49 views
1

我有問題得到地圖加載在heroku上,地圖在本地工作正常,但是當我在heroku上測試它時,Web控制檯表示錯誤是buildMap is not definegmap4rails本地工作,但不顯示在heroku

的錯誤與該行buildMap(<%=raw @hash.to_json %>);

這是我的看法:

<script src="//maps.google.com/maps/api/js?v=3.23&sensor=false&client=&key=&libraries=geometry&language=&hl=&region=" type="text/javascript"></script> 
<script src="//cdn.rawgit.com/mahnunchik/markerclustererplus/master/dist/markerclusterer.min.js" type="text/javascript"></script> 
<script src='//cdn.rawgit.com/printercu/google-maps-utility-library-v3-read-only/master/infobox/src/infobox_packed.js' type='text/javascript'></script> <!-- only if you need custom infoboxes --> 
<script src='//cdn.rawgit.com/googlemaps/js-rich-marker/gh-pages/src/richmarker-compiled.js' type='text/javascript'></script> 
<script src='//cdn.rawgit.com/printercu/google-maps-utility-library-v3-read-only/master/infobox/src/infobox_packed.js' type='text/javascript'></script> 

<% if customer_signed_in? %> 
    <nav class="navbar navbar-inverse"> 
    <div class="container-fluid"> 
    <!-- Brand and toggle get grouped for better mobile display --> 
    <div class="navbar-header"> 
     <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> 
     <span class="sr-only">Toggle navigation</span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     </button> 
     <%= link_to "Discount Now", dashboard_path, class: "navbar-brand", id: "logo" %> 
    </div> 

    <!-- Collect the nav links, forms, and other content for toggling --> 
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
     <ul class="nav navbar-nav"> 
     <li> <%= link_to "Home", dashboard_path %> </li> 
     <li> <%= link_to "edit profile", edit_customer_registration_path %></li> 
     </ul> 

     <ul class="nav navbar-nav navbar-right"> 
     <li>Signed in as <%= current_customer.email %></li> 
     <li><%= link_to "log out", destroy_customer_session_path,:method => :delete, id: "nav-login-button", type: "button", class: "btn btn-primary navbar-btn"%></li> 
     </ul> 
    </div><!-- /.navbar-collapse --> 
    </div><!-- /.container-fluid --> 
</nav> 


<%= form_tag dashboard_path, :method => :get do %> 
<div class= "row"> 
    <p> 
    <%= text_field_tag :search, params[:search], class: "col-md-4"%> 
    <%= submit_tag "Search Near", class: "btn btn-info", :name => nil %> 
    </p> 
    </div> 
<% end %> 

<div style='width: 800px;'> 
    <div id="map" style='width: 900px; height: 500px;'></div> 
</div> 

<script type="text/javascript"> 
    buildMap(<%=raw @hash.to_json %>); 

</script> 
<%else %> 
<% link_to "sign up", new_customer_session_path%> 
<% end %> 

和咖啡腳本,我建立映射:

class RichMarkerBuilder extends Gmaps.Google.Builders.Marker #inherit from builtin builder 

    # override method 
    create_infowindow: -> 
    return null unless _.isString @args.infowindow 

    boxText = document.createElement("div") 
    boxText.setAttribute("class", 'white') #to customize 
    boxText.innerHTML = @args.infowindow 
    #boxText.outerHTML = @args.title 
    @infowindow = new InfoBox(@infobox(boxText)) 

    @bind_infowindow() 

    infobox: (boxText)-> 
    content: boxText 
    pixelOffset: new google.maps.Size(-140, 0) 
    boxStyle: 
     width: "280px" 

@buildMap = (markers)-> 
    handler = Gmaps.build 'Google', { builders: { Marker: RichMarkerBuilder} } #dependency injection 

    #then standard use 
    handler.buildMap { provider: {}, internal: {id: 'map'} }, -> 
    markers = handler.addMarkers(markers) 
    handler.bounds.extendWith(markers) 
    handler.fitMapToBounds() 
    handler.bounds.extendWith markers 

這是我的application.html.erb文件

<!DOCTYPE html> 
<html> 
<head> 
    <title>CS160</title> 
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 
<%= yield %> 
<%= yield :javascript %> 
</body> 
</html> 

所以我也只能javascript_include_tag後放yield: javascript,所以我不知道是什麼問題,是

回答

0

這有可能是buildMap(<%=raw @hash.to_json %>);被稱爲在文檔加載完成之前以及您的所有Javascript文件都被加載之前。嘗試在的document.ready功能包:

$(document).ready(function() { 
    buildMap(<%=raw @hash.to_json %>); 
}); 

否則,定義RichMarkerBuilder的CoffeeScript的文件不被正確編譯成在Heroku您的資產。你能從控制檯運行buildMap({})嗎?如果沒有,您需要確保您的JS文件正在使用資產管道進行編譯。

+0

是的,我可以從控制檯運行buildMap({}),它看起來像buildMap({})包含一些價值搜索作爲經度和長期,但地圖只是不顯示 – KhoaVo

+0

和coffescript腳本正確加載到服務器,我只是檢查,它是在服務器上,並將buildmap包含在document.ready中也沒有幫助,所以我不知道什麼問題是什麼 – KhoaVo

+0

$(document).ready(function(){ buildMap(< %= raw @ hash.to_json%>); });'這對我有用 – KhoaVo

相關問題