Matt-Jensen / ember-cli-g-maps

Deprecated Google Maps Addon
http://matt-jensen.github.io/ember-cli-g-maps
MIT License
59 stars 31 forks source link

GMaps undefined #55

Closed trevorrjohn closed 8 years ago

trevorrjohn commented 8 years ago

Hey I started getting this error recently and can't figure out why it is happening.

app.js:13 Error while processing route: index Cannot read property 'geocode' of undefined TypeError: Cannot read property 'geocode' of undefined
    at GMaps.geocode (http://localhost:4200/assets/vendor.js:74185:16)
    at http://localhost:4200/assets/vendor.js:135874:25
    at Object.initializePromise (http://localhost:4200/assets/vendor.js:67799:7)
    at new Promise (http://localhost:4200/assets/vendor.js:69651:21)
    at Class.geocode (http://localhost:4200/assets/vendor.js:135859:14)
    at Class._geocode (http://localhost:4200/assets/app.js:7340:35)
    at Class._lookup (http://localhost:4200/assets/app.js:7331:19)
    at Class._lookupCoords (http://localhost:4200/assets/app.js:7325:19)
    at tryCatch (http://localhost:4200/assets/vendor.js:67749:14)
    at invokeCallback (http://localhost:4200/assets/vendor.js:67764:15)

Has anyone seen anything like this?

Matt-Jensen commented 8 years ago

Is this a fresh install of the addon? If not you may need to update your bower dependencies or ember-cli-g-maps.

Otherwise some steps to reproduce this or the offending lines in /assets/vendor.js would be helpful to debug.

trevorrjohn commented 8 years ago

This is a fresh install:

Here is the method that is raising the error:

/**
 * [geocode instantiates a google.maps Geocoder]
 * @param  {[object]} options [accepts properties lat, lng, and callback]
 * @return {[Geocoder]}       [instance of Geocoder]
 */
GMaps.prototype.geocode = function geocode(options) {
  if(!options || !options.callback) {
    throw new Error('geocode requires an options object with a callback');
  }

  var callback = options.callback;

  if (options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) {
    options.latLng = new google.maps.LatLng(options.lat, options.lng);
  }

  delete options.lat;
  delete options.lng;
  delete options.callback;

  /* This line blows up! */
  gMapsGeocoder.geocode(options, function(results, status) {
    callback(results, status);
  });
};
trevorrjohn commented 8 years ago

it seems that gMapsGeocoder is never being instantiated. I put a breakpoint here:

function setupGMapsForApps() {
  if (isGMapsForAppsSetup) {
    return false;
  } else {
    isGMapsForAppsSetup = true;
  }

  // Instantiate gMapsGeocoder
  gMapsGeocoder = new google.maps.Geocoder();

but it was never hit... I am only using the geocoder, and am not sure what actually triggers the instantiation.

Matt-Jensen commented 8 years ago

I am only using the geocoder

Are you not instantiating an Ember-cli-g-maps component in your application?

trevorrjohn commented 8 years ago

no. I am not.

Matt-Jensen commented 8 years ago

I believe that's the issue.

Short version reinstall your bower dependencies and it should work.

Long version It was an issue with the gmaps-for-apps bower dependency (used by this project) instantiating the Google Maps Geocoder instance when the first GMaps instance was created. In the latest release of that project I've moved instantiation of the Geocoder to the first invocation of the geocode method: the commit here shows the update which I think makes more sense.

trevorrjohn commented 8 years ago

ok thanks, I will update.