Hallo borisbaer,
Darstellung und Inhalt kann man auf vielen Ebenen trennen.
Die MARKER Funktion ist reine Darstellung, sie bekommt ihren Textinhalt und ihre Position übergeben. Aber sie tut eigentlich noch zu wenig (und ob sie das richtige tut, bleibe dahingestellt.
Für eine saubere Trennung müsste man charakterisieren, welche Darstellungen es für einen Marker gibt, und sich dann überlegen, wie man eine solche Marker-Funktion parametrieren sollte, um die Darstellung möglichst vollständig in der MARKER Funktion zu behalten. Wilde Style-Angaben in den Parametern sollte man vermeiden, sowas muss die MARKER-Funkton generieren.
Nur als Beispiel - ich weiß nicht ob das für Dich so passend ist: Ein Marker hat
- Einen Text
- Ein Symbol für die Position des Objekts (Quadrat, Kreis
- Eine zweiteilige Verbindungslinie
- Teil 1: Horizontal links oder rechts vom Text. Wenn links vom Text, wird am linken Ende weitergeführt. Wenn rechts vom Text, wird am rechten Ende weitergeführt
- Teil 2: Weiterführung vertikal oder diagonal aufwärts oder abwärts, bis zum Symbol
Ich würde von einer MARKER Funktion erwarten, dass ich ihr nur dies Mitteile:
- Art des Markers
- Markersymbol (vielleicht)
- Legendentext ("Selfforum-Beitrag Stufe 3")
- Startpunkt der Linie (x,y)
- Linienvektor Teil 1 (dx1, dy1)
- Linienvektor Teil 2 (dx2, dy2)
- Dann vielleicht noch Angaben zu Farben. Die sind vermutlich optional; eventuell kann man das ähnlich wie jQuery mit einem Optionen-Array machen.
Ob der Text links oder rechts des Linienstartpunktes steht, ermittelt sich automatisch: Ist dx1 positiv, läuft die Linie nach rechts, der Text muss also links vom Startpunkt stehen. Wenn die Linie initial nach unten läuft, kann man den Text zentriert darüber setzen. Keine Ahnung, welche Linientypen Du hast, aber EIGENTLICH kann eine Linie dieser Art 64 Ausprägungen haben (jeder Teil in 8 mögliche Grundrichtungen) - d.h. da musst Du schlau programmieren, um daran nicht wahnsinnig zu werden. Wenn Du immer horizontal startest, sind es nur 8 Typen.
Das ist nicht einfach, es ist abstrakt und eventuell programmierst Du da Dinge "auf Halde". Aber damit hättest Du dann einen Marker-Generator, den Du rein fachlich ansteuerst und der die Technik komplett kapselt.
Mit SVG statt HTML wäre das Darstellen der Linien vermutlich leichter. Aber damit hättest Du dann eine weitere Komplikation drin…
Rolf
sumpsi - posui - obstruxi