Appendix A - JavaScript code for sfWidgetFormGMapAddress
The following code is the JavaScript needed to make the sfWidgetFormGMapAddress widget work:
function sfGmapWidgetWidget(options){
  // this global attributes
  this.lng      = null;
  this.lat      = null;
  this.address  = null;
  this.map      = null;
  this.geocoder = null;
  this.options  = options;
 
  this.init();
}
 
sfGmapWidgetWidget.prototype = new Object();
 
sfGmapWidgetWidget.prototype.init = function() {
 
  if(!GBrowserIsCompatible())
  {
    return;
  }
 
  // retrieve dom element
  this.lng      = jQuery("#" + this.options.longitude);
  this.lat      = jQuery("#" + this.options.latitude);
  this.address  = jQuery("#" + this.options.address);
  this.lookup   = jQuery("#" + this.options.lookup);
 
  // create the google geocoder object
  this.geocoder = new GClientGeocoder();
 
  // create the map
  this.map = new GMap2(jQuery("#" + this.options.map).get(0));
  this.map.setCenter(new GLatLng(this.lat.val(), this.lng.val()), 13);
  this.map.setUIToDefault();
 
  // cross reference object
  this.map.sfGmapWidgetWidget = this;
  this.geocoder.sfGmapWidgetWidget = this;
  this.lookup.get(0).sfGmapWidgetWidget = this;
 
  // add the default location
  var point = new GLatLng(this.lat.val(), this.lng.val());
  var marker = new GMarker(point);
  this.map.setCenter(point, 15);
  this.map.addOverlay(marker);
 
  // bind the move action on the map
  GEvent.addListener(this.map, "move", function() {
     var center = this.getCenter();
     this.sfGmapWidgetWidget.lng.val(center.lng());
     this.sfGmapWidgetWidget.lat.val(center.lat());
  });
 
  // bind the click action on the map
  GEvent.addListener(this.map, "click", function(overlay, latlng) {
    if (latlng != null) {
      sfGmapWidgetWidget.activeWidget = this.sfGmapWidgetWidget;
 
      this.sfGmapWidgetWidget.geocoder.getLocations(
        latlng,
        sfGmapWidgetWidget.reverseLookupCallback
      );
    }
  });
 
  // bind the click action on the lookup field
  this.lookup.bind('click', function(){
    sfGmapWidgetWidget.activeWidget = this.sfGmapWidgetWidget;
 
    this.sfGmapWidgetWidget.geocoder.getLatLng(
      this.sfGmapWidgetWidget.address.val(),
      sfGmapWidgetWidget.lookupCallback
    );
 
    return false;
  })
}
 
sfGmapWidgetWidget.activeWidget = null;
sfGmapWidgetWidget.lookupCallback = function(point)
{
  // get the widget and clear the state variable
  var widget = sfGmapWidgetWidget.activeWidget;
  sfGmapWidgetWidget.activeWidget = null;
 
  if (!point) {
    alert("address not found");
    return;
  }
 
  widget.map.clearOverlays();
  widget.map.setCenter(point, 15);
  var marker = new GMarker(point);
  widget.map.addOverlay(marker);
}
 
sfGmapWidgetWidget.reverseLookupCallback = function(response)
{
  // get the widget and clear the state variable
  var widget = sfGmapWidgetWidget.activeWidget;
  sfGmapWidgetWidget.activeWidget = null;
 
  widget.map.clearOverlays();
 
  if (!response || response.Status.code != 200) {
    alert('no address found');
    return;
  }
 
  // get information location and init variables
  var place = response.Placemark[0];
  var point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
  var marker = new GMarker(point);
 
  // add marker and center the map
  widget.map.setCenter(point, 15);
  widget.map.addOverlay(marker);
 
  // update values
  widget.address.val(place.address);
  widget.lat.val(place.Point.coordinates[1]);
  widget.lng.val(place.Point.coordinates[0]);
}
 
            インデックス
Document Index
関連ページリスト
Related Pages
 Introduction Introduction
 Advanced Routing Advanced Routing
 Enhance your Productivity Enhance your Productivity
 Emails Emails
 Custom Widgets and Validators Custom Widgets and Validators
 Advanced Forms Advanced Forms
 Extending the Web Debug Toolbar Extending the Web Debug Toolbar
 Advanced Doctrine Usage Advanced Doctrine Usage
 Taking Advantage of Doctrine Table Inheritance Taking Advantage of Doctrine Table Inheritance
 Symfony Internals Symfony Internals
 Windows and symfony Windows and symfony
 Developing for Facebook Developing for Facebook
 Leveraging the Power of the Command Line Leveraging the Power of the Command Line
 Playing with symfony's Config Cache Playing with symfony's Config Cache
 Working with the symfony Community Working with the symfony Community
 Appendix A - JavaScript code for sfWidgetFormGMapAddress Appendix A - JavaScript code for sfWidgetFormGMapAddress
 About the Authors About the Authors
 Appendix B - Custom Installer Example Appendix B - Custom Installer Example
 Appendix C - License Appendix C - License
 
              
              日本語ドキュメント
Japanese Documents
 2011/01/18 Chapter 17 - Extending Symfony 2011/01/18 Chapter 17 - Extending Symfony
 2011/01/18 The generator.yml Configuration File 2011/01/18 The generator.yml Configuration File
 2011/01/18 Les tâches 2011/01/18 Les tâches
 2011/01/18 Emails 2011/01/18 Emails
 2010/11/26 blogチュートリアル(8) ビューの作成 2010/11/26 blogチュートリアル(8) ビューの作成
 
  
           
                