2013-04-19 3 views
5

Я раздвоенный директиву uiMap AngularUI для того, чтобы обменять InfoWindow для Infobox и добавить MarkerClusters. Я сделал некоторые обширные обновления для uiMap -> icMap; в частности, я переместил директивную логику из контроллеров, сделав uiMap директивой «master»). У меня почти все работает, за исключением того, что щелчок на встроенном MapMarker не открывает инфобокс.AngularJS: обратный вызов события не срабатывает на Google Maps родного маркера карты

Я думаю причина в том, что я не правильно связывать событие щелчка на родном MapMarker (IC-map.js: 163).

Перед тем, как реорганизовать uiMap, я просто добавил icMapInfoBox директиву в map.js. Его открытого было зарегистрировано событие/инициируется:

ui-event="{'map-click':'openMarkerInfo(marker)'}" 

, который называется openMarkerInfo() определен в контроллере (копировать/вставить из моего репозитория: GitHub Gist).

Однако теперь, когда я нажимаю на собственный MapMarker, ничего не происходит, и я не получаю никаких ошибок в консоли (но все остальные события все равно срабатывают должным образом).

Оригинальные Plunk
упрощенный Plunk (снято MarkerClusters)
В обоих plunks, проблема, вероятно, лежит в IC-map.js (первый файл в списке)

map.json представляет собой файл данных
angular.js, angular-ui.js, и infobox.js являются Lib файлы

Редактировать я заметил, что InfoBox.map является undefined; Я предполагаю, что это имеет какое-то отношение к проблеме.

Редактировать Неопределенное InfoBox.map собственность была частью проблемы: руководство вызов InfoBox.open на IC-map.js: 189 работ (шаблон не компилируется, но это другая проблема), но событие click по-прежнему не вызывает InfoBox.open. Также шаблон не включается.

SOLVED: Я обрабатывал объект DOM вместо объекта js . Скоро опубликует решение.

+0

Предоставьте jsFiddle все файлы. – tschiela

+0

@tschiela, я уже предоставил Plunkr со всеми файлами (он связан в нижней части вопроса). Сегодня Plunkr выглядит немного медленнее, поэтому загрузка занимает несколько секунд. – jacob

+0

О, извините, я поскользнулся с этой ссылкой. thx – tschiela

ответ

1

Рабочий пример: http://plnkr.co/edit/mamx5EXtHxSo4aqMSZUd

  1. оригинал> IC-map.js: 156 Мой слушатель событий должен был быть связан с google.maps.event.addListener() (см Рабочий пример> ic-map.js: 154-156).
  2. Кроме того, было слишком много проблем с использованием шаблонов, поэтому я добавил 2 divs в качестве детей div#map (см. Рабочий пример> index.html: 41-42). Из-за того, как работают наследование и общие модели, все директивы ДОЛЖНЫ быть на одном и том же элементе DOM (потому что никто не может смотреть вниз, только вверх). Это было необходимо для перемещения директивной логики из controller (как и реализация от AngularUI). В моей реализации модель разделяется между директивами icMaps * в директивах (и directive controllers).
  3. Отличие :
    • uiMapMarker, прикрепляется к объекту DOM: ng-repeat="marker in markers"
    • icMapMarkers, просто объект JS.