0

我是Sencha Touch的新手,懂Javascript,jQuery,HTML5。Sencha Touch 2.x Google Place API v3

我正在用Sencha Touch + Sencha Architect开发简单的Google Map应用程序,它在当前位置放置标记,还使用Google Place查找当前位置附近的“商店”(即需要Google地点搜索的类型)。我在'callbackPlaces'(即纬度,经度)中获取位置,但Google.Maps.Marker在'callbackPlaces'方法中提供了错误(即通过'addMarker'方法调用,我也尝试通过将Google.Maps.Marker放入'callbackPlaces')。

Ext.define('MyApp.view.Map', { 
    extend: 'Ext.Map', 
    alias: 'widget.map', 

    config: { 
     useCurrentLocation: true, 
     listeners: [ 
      { 
       fn: 'onMapMaprender', 
       event: 'maprender' 
      } 
     ] 
    }, 

    onMapMaprender: function(map, gmap, options) { 
     this.initializePlaces(); 
    }, 

    initializePlaces: function() { 

     //Set Marker on Current Position 
     var geo = this.getGeo(); 
     var currentPosition = new google.maps.LatLng(geo.getLatitude(), geo.getLongitude()); 
     this.createMarker(currentPosition); 

     //request set for Places Services 
     var request = { 
      location: currentPosition, 
      radius: 500, 
      types: ['store'] 
     }; 


     this.getMap().zoom = 15; 

     // Call PlacesService 
     var service = new google.maps.places.PlacesService(this.getMap()); 
     service.nearbySearch(request, this.callbackPlaces); 



    }, 

    callbackPlaces: function(results, status) { 

     if (status == google.maps.places.PlacesServiceStatus.OK) { 

      for (var i = 0; i < results.length; i++) { 
       addMarker(results[i]); 
      } 
     } 
    }, 

    createMarker: function(position) { 
     //Here Position = Google Map LatLng 

     var infoWindow = new google.maps.InfoWindow(); 

     var marker = new google.maps.Marker({ 
      map: this.getMap(), 
      position: position 
     }); 

     google.maps.event.addListener(marker, "click", function() {  
      infoWindow.setContent("Lng: " + marker.position.lng() + "\n Lat: " + marker.position.lat()); 
      infoWindow.open(this.getMap(), marker); 
     }); 
    }, 

    addMarker: function() { 
     //Here Place = google.maps.places 

     var infoWindow = new google.maps.InfoWindow(); 

     var marker = new google.maps.Marker({ 
      map: this.getMap(), 
      position: place.geometry.location 
     }); 


     google.maps.event.addListener(marker, "click", function() {  
      infoWindow.setContent("Lng: " + marker.position.lng() + "\n Lat: " + marker.position.lat()); 
      infoWindow.open(this.getMap(), marker); 
     }); 
    } 

}); 

我不知道出了什么问题!

任何帮助|提示将不胜感激!

在此先感谢。

+1

你不应该叫this.addMarker(结果[1]);而不是addMarker(results [i]); ? – 2013-03-14 14:45:11

+0

实际上同样的事情是'initializePlaces'中的工作也尝试没有'this',它不工作。 – 2013-03-15 05:02:21

+0

事情是......我不能在'callbackPlaces'方法中得到'this'的任何东西。除了“callbackPlaces”之外,所有方法都可以访问“this”。所以,我在'callbackPlaces'方法中尝试使用和不使用'this'。但不是以任何方式工作。很奇怪! – 2013-03-15 10:05:43

回答

1

您指出callbackPlaces函数中存在范围问题。

因此,你应该替换下面的行:

service.nearbySearch(request, this.callbackPlaces); 

service.nearbySearch(request, function (results, status) { 
    this.callbackPlaces.call(this, [results, status]); 
}); 

希望这有助于

+0

它给出错误:“不能调用'undefined'的方法'调用',我在中间写的东西”函数(结果,状态){}“工作,除了'this'。它认为'this'= [对象全局]而不是[对象映射]或[对象对象] – 2013-03-15 11:42:12

+0

我错过任何设置,需要完成使用Google API与Sencha Touch一起工作顺便说一句,我正在使用Sencha Touch 2.1和Sencha Architect – 2013-03-15 11:45:25