2014-07-10 4 views
1

여러 맵을 동적으로 생성하려고했지만 모든 것이 잘 돌아 갔지만 표시가 보이지 않는 대신 "undefined"라는 문자열이 올바른 위치에 나타납니다. 여기에 코드가 있습니다. 개체 모델Gmaps4rails 마커 그림 대신에 "undefined"라는 문자열이 표시됩니다.

def hash 
    hash = Gmaps4rails.build_markers(location) do |loc, marker| 
     marker.lat loc.latitude 
     marker.lng loc.longitude 
     marker.picture ({ 
      :url => "http://addons.cdn.mozilla.net/img/uploads/addon_icons/13/13028-64.png", 
      :width => 32, 
      :height => 32 
      }) 
    end 
    hash 
end 

커피 스크립트 코드

class RichMarkerBuilder extends Gmaps.Google.Builders.Marker 
create_marker: -> 
options = _.extend @marker_options(), @rich_marker_options() 
@serviceObject = new RichMarker options 

rich_marker_options: -> 
    marker = document.createElement("div") 
    marker.setAttribute 'class', 'marker_container' 
    marker.innerHTML = @args.marker 
    { content: marker } 

@buildMap = (markers, id)-> 

handler = Gmaps.build 'Google', { builders: { Marker: RichMarkerBuilder} } 
handler.buildMap { provider: {}, internal: {id: id} }, -> 
    markers = handler.addMarkers(markers) 
    handler.bounds.extendWith(markers) 
    handler.fitMapToBounds() 

에서 구현 그리고

해시 방법은

<SCRIPT TYPE="text/javascript"> 
      $(window).on('load', function(){ 
       buildMap(<%= raw hash.to_json%>,<%=entity.id%>); 
      }); 
    </SCRIPT> 

모든 마커 사진을 제외하고 괜찮 뷰에서 스크립트 호출을 포함 나는 그것을 알 수 없다. 어떤 도움을 주시면 감사하겠습니다. 감사!

는 자바 스크립트 코드 :

handler = Gmaps.build('Google'); 
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){ 
markers = handler.addMarkers([ 
{ 
    "lat": 0, 
    "lng": 0, 
    "picture": { 
    "url": "https://addons.cdn.mozilla.net/img/uploads/addon_icons/13/13028-64.png", 
    "width": 36, 
    "height": 36 
    }, 
    "infowindow": "hello!" 
} 
]); 
handler.bounds.extendWith(markers); 
handler.fitMapToBounds(); 
}); 

buildMap 기능 테스트 버전 : apneadiving으로

@buildMap = -> 
handler = Gmaps.build 'Google', { builders: { Marker: RichMarkerBuilder} } 

handler.buildMap { provider: {}, internal: {id: 'map'} }, -> 
markers = handler.addMarkers([ 
    {"lat": 0, "lng": 0, 'picture':{'url':'http://addons.cdn.mozilla.net/img/uploads/addon_icons/13/13028-64.png'}} 
]) 
handler.bounds.extendWith(markers) 
handler.fitMapToBounds() 
+0

마커 용으로 생성 된 json은 무엇입니까? – apneadiving

+0

위도와 경도와 함께 너비와 높이도 그림 URL에 나타납니다. – ysholqamy

+0

아직도 ... 제발 그것을 제공 할 수 있습니까? – apneadiving

답변

1

제안 : 마침내, 나는 해결책을 찾아 냈다. 추악하지만 여전히 일하고 있습니다. I는 함수 (원시 entity.hash.to_json)의 반환 값 핸들러 4 개 인수 소요

function buildMap(handler,id) { 
    var lat = handler[0]['lat']; 
    var lng = handler[0]['lng']; 
    var picture = handler[0][picture]; 
    handler = Gmaps.build('Google'); 
    handler.buildMap({ provider: {}, internal: {id: id}}, function(){ 
     markers = handler.addMarkers([ 
     { 
      "lat": lat, 
      "lng": lng, 
      "picture": picture, 
     } 
     ]); 
     handler.bounds.extendWith(markers); 
     handler.fitMapToBounds(); 
     handler.getMap().setZoom(15); 
    }); 
    }; 

는 엔티티의 ID는 각 새로운 맵을 만들 RichMarkerBuilder를 사용하지 않고 buildMap 기능을 재정의 엔티티 인 경우 lng 및 lat는 엔티티 위치의 위도 및 경도입니다. 전달 된 핸들러 객체에서 핸들러를 가져 오는 방법을 알 수 없습니다.

추신 :이 솔루션을 제안하면, 코드는 꽤 제한된 js 기술로 인해 꽤 추악합니다.

+0

처리기를 arg로 전달하는 이유는 확실하지 않습니다. – apneadiving

+0

사실 실제로 마커의 json 인 args에서 처리기를 제거하려고 시도했지만 오류가 발생했습니다. 이 혼란을 청소하는 어떤 도움도 매우 감사 할 것입니다. 다시 한 번 감사드립니다! – ysholqamy

+0

나는 조금 더 깨끗하다고 ​​생각되는 버전으로 코드를 업데이트했다. – ysholqamy