Я пытаюсь измерить расстояние от пользователя до адреса в каждом объекте модели.До сих пор у меня был код, работающий с жестко закодированными данными, но мне было очень тяжело получать данные модели в моем контроллере и обновлять мою модель.Файлы ниже ... (также рады услышать о любых альтернативных способах сделать это, например, о помощнике, и т. Д.)
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 с «милями» для каждого объекта модели.Таким образом, имея список достопримечательностей с милями далеко показал.Есть смысл?Спасибо!!