Проблемы с функцией Ember Mapping - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь измерить расстояние от пользователя до адреса в каждом объекте модели.До сих пор у меня был код, работающий с жестко закодированными данными, но мне было очень тяжело получать данные модели в моем контроллере и обновлять мою модель.Файлы ниже ... (также рады услышать о любых альтернативных способах сделать это, например, о помощнике, и т. Д.)

import Ember from 'ember';
import { inject as service } from '@ember/service';

export default Ember.Controller.extend({
  userLocation: null,
  endLocation: null,
  milesAway: null,
  locationIsLoading: true,
  googleMapsApi: service(),
  geolocation: service(),
  userLocationChanged: function () {
    this.get('homepage').forEach(model => {
      this.set('endLocation', model.get('address'));
    }),
    this.get('userLocation');
    this.toggleProperty('locationIsLoading');
    console.log("User's location recieved.")
    this.send('getDistance');
  }.observes('userLocation'),
  actions: {
    distanceFrom: function() {
      this.get('geolocation').trackLocation().then((geoObject) => {
        let currentLocation = this.get('geolocation').get('currentLocation');
        this.set('userLocation', currentLocation);
      }, (reason) => {
        console.log('Geolocation failed because ' + reason);
      });
    },
    getDistance: function(){
      console.log("Getting Distance");
      this._super(...arguments);
      this.get('googleMapsApi.google').then((google) => {
        let endLocation = this.get('endLocation');
        let userLocationLat = this.get('userLocation')[0];
        let userLocationLon = this.get('userLocation')[1];
        let userLocation = "" + userLocationLat + ',' + userLocationLon
        console.log(userLocation);
        let distanceMatrixService = new google.maps.DistanceMatrixService();
        $(function() {
          function calculateDistance(origin, destination) {
            distanceMatrixService.getDistanceMatrix({
              origins: [userLocation],
              destinations: [endLocation],
              travelMode: google.maps.TravelMode.DRIVING,
              unitSystem: google.maps.UnitSystem.IMPERIAL,
              avoidHighways: false,
              avoidTolls: false
            }, callback);
          }
          function callback(response, status) {
            if (status != google.maps.DistanceMatrixStatus.OK) {
              $('#result').html(err);
            } else {
              var origin = response.originAddresses[0];
              var destination = response.destinationAddresses[0];
              if (response.rows[0].elements[0].status === "ZERO_RESULTS") {
                console.log("No Results");
              } else {
                var distance = response.rows[0].elements[0].distance;
                var distance_value = distance.value;
                var distance_text = distance.text;
                var miles = distance_text.substring(0, distance_text.length - 3);
                console.log(miles);
              }
            }
          };
          calculateDistance();
        });
      });
    }
  }
});

models / homepage.js

import DS from 'ember-data';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';
import Contentful from 'ember-data-contentful/models/contentful';


export default Contentful.extend({
  logo: belongsTo('contentful-asset'),
  backgroundImage: belongsTo('contentful-asset'),
  rating: attr('number'),
  description: attr('string'),
  address: attr('string'),
  distanceFrom: attr(),
});

Я знаю, что это много, но это все необходимые файлы.Я хотел бы использовать «адрес» от каждого объекта модели, чтобы обновить distanceFrom с «милями» для каждого объекта модели.Таким образом, имея список достопримечательностей с милями далеко показал.Есть смысл?Спасибо!!

...