2013-10-29 8 views
0

유성우 애플리케이션에 맵을 표시하는 템플리트가 있습니다. 이 템플릿은 두 가지에 사용됩니다 :meteor.js에서 다른 데이터와 동일한 템플리트 사용

  • 표시가지도
  • 디스플레이는 사용자가 선택하면 특정 장소의 개별 위치에 내 응용 프로그램의 검색 결과를 하나의

가 현재 내 코드는 다음 (나는이 템플릿에 대한 다른 기능이나 도우미가 없다) :

Template.map.rendered = function() { 
if(!map) 
    var map = new Course_map('#map'); 

Deps.autorun(function(){ 

    if (Session.get("current_place")){ 
     var places = Places.find(Session.get("current_place")).fetch(); 
    } 
    else{ 
     var places_cursor = get_searched_places(); 
     if (places_cursor){ 
      var places = places_cursor[0].fetch(); 
      var places_id = _.pluck(places,'_id'); 

      //Remove the markers that are no longer in the places_id array 
      map.remove_markers(places_id); 
     } 
    } 

    if(places){ 
     // Add all the marker in places 
     for(var i = 0, places_length = places.length; i < places_length; i ++){ 
      map.add_marker(places[i]); 
     } 
     // Recenter the map to focus on the marker area 
     map.calc_bounds(); 
    } 
}); 
}; 

내지도 템플릿 :

<template name="map"> 
<div id="map" class='google-map'> 
</div> 

는 사용자에 Session.get ("current_place")로 장소를 선택 여부에 따라 나는 변수 내 장소에서 서로 다른 정보를로드합니다.

나는 그 디자인이 마음에 들지 않아 내가하고 싶은 일을 할 수있는 더 좋은 방법을 찾을 수 있다고 생각합니다. 의견 있으십니까 ?

+0

귀하의 솔루션은 나에게 잘 보이는 @Itbesh. 내가 싫어하는 유일한 것은'map' 변수의 정의입니다. 이 객체를 템플릿에 꼭 붙이고 싶다면'this.map' (또는'this._map', [here] (http://docs.meteor.com/#template_inst) 참조)을 사용해야한다고 생각합니다 instacne이지, 지역 범위가 아니다. 내가 맞습니까? –

+0

@ Tomasz : 귀하의 의견을 보내 주셔서 감사합니다. 내 템플릿을 표시하기 위해 내 게시물을 편집하고 렌더링 된 코드가이 템플릿의 유일한 코드임을 정확하게 설명합니다. 그래서 저는 이것을 사용하지 않습니다. 맵을 필요로했기 때문에 맵을 만들었습니다. 그렇지 않으면 어떻게할까요? – ltbesh

+0

당신이 말한 바로는 당신이 코드의 다른 곳에서이'map' 객체에 접근해야한다고 가정하기 때문에 아마 전역 적으로 정의되었을 것입니다, 맞습니까? 그럼 왜'var' 접두사를 사용하고 있습니까? 'var' 접두사가 붙은 변수는 지역적으로 만 정의 될 것이므로 전역'map'은 변경되지 않고'if (! map)'조건은 사실 항상 만족됩니다. 사실 각'render' 이벤트에 대해'Course_map'의 새로운 인스턴스를 생성하고 있습니다 만, 당신이 원하는 것은 아닌 것으로 가정합니다. –

답변

1

당신이 직면 한 문제 중 하나는 Meteor를 외부 맵 API와 통합하는 방법입니다. Meteor는 실제로이 작업을 수행하기 쉽지만 실제로는 cursor#observeChanges() 함수를 사용하는 훨씬 쉬운 방법을 제공합니다. 그 중 added, changedremoved 콜백을 사용하면지도 API에 직접 연결할 수 있습니다.

저는 사실 Meteor와 OpenLayers로 매핑 애플리케이션을 구현했습니다. 정확히이 작업을 수행합니다. 맨 마지막에 아래로 스크롤 :

https://github.com/mizzao/CrowdMapper/blob/master/client/views/map.coffee

관련 문제