Приведенный ниже код определяет фиктивные функции pushX()
для имитации функций в вашем примере, затем определяет карту замыканий, где каждое замыкание вызывает соответствующую функцию pushX()
, затем ищет соответствующее замыкание по имени и вызывает его, передавая имя в качестве параметра:
def pushA(def name) { println "In pushA() with $name" }
def pushB(def name) { println "In pushB() with $name" }
def funcMap = [
a: { pushA(it) },
b: { pushB(it) }
]
def repoName = 'a'
// Invoke the closure mapped to 'repoName', also passing 'repoName' as a parameter.
funcMap[repoName].call(repoName)
Может быть, что-то подобное будет работать для вас. Это все еще пахнет довольно плохо, хотя; если pushA()
используется только когда нажимается на репо А, зачем ему имя репо в качестве параметра? Вполне может быть лучший способ организовать все это, включая части, не показанные выше.
Вы можете найти некоторые хорошие идеи в этой статье , в которой сравниваются несколько методов обработки большого количества маркеров.
Менеджер маркеров имеет некоторые ограничения, в зависимости от того, что вы пытаетесь достичь; например, он не позволяет каждому маркеру быть доступным с любого уровня масштабирования. Я создал функцию кластеризации на основе принципов, рассмотренных в этого руководства . Он использует API статических карт в PHP, но принципы кластеризации могут использоваться по вашему усмотрению.
Обновление: Эта утилита кластеризации была только что выпущена: MarkerClusterer