Нокаутные литералы объектов не работают с Google Maps?

1

Итак, у меня есть небольшой проект с картами, над которым я работаю, отлично поработал, пока я решил принести KnockoutJS в микс для обработки нескольких вещей. Я определил свои маркеры с помощью наблюдаемого массива для удобства отображения в интерфейсе. Но, если я попытаюсь назвать это, чтобы поместить маркеры на мою карту, я не получу никаких маркеров. Если я удалю литералы объекта lat/lng в коде ниже (но сохраните числа как часть массива) и просто вызовите их через

markers()[i][1] 

а также

markers()[i][2]

соответственно, я получаю маркеры. Halp! Я выложил документы нокаута и не нашел никакой информации об этом. Не выбрасывайте никаких консольных ошибок - просто не помечены никакие маркеры на карте. Большое спасибо за любую помощь!

var markers = ko.observableArray([
   [{ Name: 'Eye On Entrepreneurs' }, { lat: 45.913750 }, { lng: -89.257755 }],
   [{ Name: 'Trigs of Eagle River' }, { lat: 45.915717 }, { lng: -89.240019 }],
   [{ Name: 'Eagle River Airport' }, { lat: 45.934099 }, { lng: -89.261834 }]
]);

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    center: {lat: 45.917034, lng: -89.248168},
    zoom: 15,
    disableDefaultUI: true
  });

  for (i = 0; i < markers().length; i++){
    var position = new google.maps.LatLng(markers()[i].lat, markers()[i].lng);
    marker = new google.maps.Marker({
       position: position,
       map: map,
       title: markers()[i].name
    });
  }
}
Теги:
google-maps
google-maps-api-3
knockout.js

1 ответ

2
Лучший ответ

В настоящее время я работаю с KnockoutJS и OracleJET в своем офисе.

Хотя это неверно, я до сих пор не видел прецедентов, где у наблюдаемого массива больше массивов. Мы просто размещаем объекты внутри родительского наблюдаемого массива. Я изменил ваш код следующим образом:

this.markers = ko.observableArray([
                {Name: 'Eye On Entrepreneurs', lat: 45.913750, lng: -89.257755},
                {Name: 'Trigs of Eagle River', lat: 45.915717, lng: -89.240019},
                {Name: 'Eagle River Airport', lat: 45.934099, lng: -89.261834}
            ]);

Он работает нормально.

И у вас есть опечатка: капитализируйте 'n' имени. title: self.markers()[i].Name

  • 0
    Добавление его в viewmodel сделало свое дело - ты классный, спасибо за помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню