[JS] Mootools conflicteert met GMaps MarkerManager

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • bartosiej
  • Registratie: Juli 2005
  • Laatst online: 16:07
Hallo allemaal,

Ik probeer de marker manager van google maps te gebruiken. Dit is een handige google maps plugin om gemakkelijk verschillende markers op verschillende zoom niveau's te laten zien.

Een werkend voorbeeld is hier te vinden:
http://elektro.getmyip.com/mapstest.php

De website waarop ik de code gebruik gebruikt ook echter MooTools (een bekend JS Framework), als ik dit script include (en verder NIKS verander), krijg ik dit:
http://elektro.getmyip.com/mapstest_mootools.php

De twee codes zijn identiek, behalve de mootools versie dit regeltje extra heeft:
code:
1
<script type='text/javascript' src='js/mootools-core.js'></script>

Ik heb dit probleem al op verschillende manieren proberen op te lossen
- Andere versie MooTools -> Ze geven allemaal hetzelfde probleem
- Common variable namen zoals 'place' renamen naar iets anders
- Markermanager/Google Maps JS aanroepen voor het aanroepen van MooTools
- Kleine wijzigingen in de javascript code

Niks blijkt te werken! Ik krijg met firefox de volgende error:
code:
1
2
placert.position is undefined
[Break on this error] var position = new GLatLng(p...ition"][0], placert["position"][1]);


Als ik deze for-loop na 1 loop 'break' krijg ik alsnog de volgende error:
code:
1
2
layer.zoom is undefined
[Break on this error] mgr.addMarkers(markers, layer["zoom"][0], layer["zoom"][1]);


Dus dat lijkt ook niet te werken! Als mootools geinclude wordt dan krijg ik gewoon een javascript error, no-matter-what..

Iemand enig idee, of ervaring hiermee?

En zo ja, hoe los ik dit op..? Ik zit er al een aantal dagen mee te puzzelen maar ik kom er niet uit!

Alvast bedankt,

Bart

EDIT: OEPS ik zie dat topic hier niet thuishoort, khoop dat iemand m kan verplaatsen _/-\o_

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Voor de volgende keer (maar je was er zelf al achter gekomen): Waar hoort mijn topic?
PRG >> WEB

Als je volgende keer dan even een Topic Report (Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/icon_hand.gif) doet merken wij 't ook eerder op ;)

[ Voor 31% gewijzigd door RobIII op 20-05-2010 01:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • UltimateB
  • Registratie: April 2003
  • Niet online

UltimateB

Pomdiedom

Na de for loop dit toevoegen:

JavaScript:
1
2
3
if(typeof(photoLayer[i]) !== 'function'){
  // doe je ding
}


MooTools zet allemaal extra functies bij arrays e.d. en daar gaat hij kapot op. Andere oplossing is de MooTools methode gebruiken voor het loopen door je array. Zal iets met een iterator zijn,maar weet die syntax niet uit mijn hoofd.

"True skill is when luck becomes a habit"
SWIS


Acties:
  • 0 Henk 'm!

  • bartosiej
  • Registratie: Juli 2005
  • Laatst online: 16:07
top! Gefixed!

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
Of een library gebruiken die niet je global namespace verkracht.

Acties:
  • 0 Henk 'm!

  • UltimateB
  • Registratie: April 2003
  • Niet online

UltimateB

Pomdiedom

Dat is wel beter ja :)

Google die biedt de Google Maps API ook aan via een Ajax loader. Via deze loader kan je ook JQuery laden, dit heeft als voordeel dat deze elkaar echt niet in de weg zitten.

"True skill is when luck becomes a habit"
SWIS


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Bosmonster schreef op donderdag 20 mei 2010 @ 09:56:
Of een library gebruiken die niet je global namespace verkracht.
Dit heeft niets met global namespace te maken maar met het feit dat Mootools Array extend. Maar de basis van het probleem is gewoon het verkeerde gebruik van for-in om door een array te itereren. for-in gebruik je voor hashmaps, en dat is typisch een Object en geen Array.
UltimateB schreef op donderdag 20 mei 2010 @ 01:54:
Na de for loop dit toevoegen:

JavaScript:
1
2
3
if(typeof(photoLayer[i]) !== 'function'){
  // doe je ding
}


MooTools zet allemaal extra functies bij arrays e.d. en daar gaat hij kapot op. Andere oplossing is de MooTools methode gebruiken voor het loopen door je array. Zal iets met een iterator zijn,maar weet die syntax niet uit mijn hoofd.
Als je al een Array als hashmap gebruikt (bad practice) gebruik dan hasOwnProperty()

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
crisp schreef op donderdag 20 mei 2010 @ 11:43:
[...]

Dit heeft niets met global namespace te maken maar met het feit dat Mootools Array extend.
Dat ook nog eens ja.

http://mankz.com/code/GlobalCheck.htm
UltimateB schreef op donderdag 20 mei 2010 @ 11:33:
Dat is wel beter ja :)

Google die biedt de Google Maps API ook aan via een Ajax loader. Via deze loader kan je ook JQuery laden, dit heeft als voordeel dat deze elkaar echt niet in de weg zitten.
jQuery zit sowieso nooit iets in de weg, want het vervuilt de global namespace niet en past geen core javascript functionaliteit aan.

[ Voor 45% gewijzigd door Bosmonster op 20-05-2010 11:55 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Qua global namespace pollution doet Mootools het inderdaad niet zo best, ik heb daar zelf ook al eens problemen mee ondervonden.

Het extenden van native javascript objecten is echter imo niet altijd verkeerd (zolang je maar van Object.prototype afblijft!), hoewel Mootools dat ook wel in het extreme doorvoert :P

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
Het is niet per definitie verkeerd, maar het kan rare issues opleveren mbt tot interoperabiliteit.

Als bureau dat wel eens met andermans code moet werken is dat natuurlijk ongewenst.

Acties:
  • 0 Henk 'm!

  • UltimateB
  • Registratie: April 2003
  • Niet online

UltimateB

Pomdiedom

crisp schreef op donderdag 20 mei 2010 @ 11:43:
[...]

Dit heeft niets met global namespace te maken maar met het feit dat Mootools Array extend. Maar de basis van het probleem is gewoon het verkeerde gebruik van for-in om door een array te itereren. for-in gebruik je voor hashmaps, en dat is typisch een Object en geen Array.


[...]

Als je al een Array als hashmap gebruikt (bad practice) gebruik dan hasOwnProperty()
Een for (var i=0; i<array.length; i++) dit probleem inderdaad onbestaand kunnen maken. Ik ben wel benieuwd hoe je dan hasOwnProperty zoou kunnen gebruiken in dit geval, kende die methode namelijk nog niet. Wat is lees is het een controle of een bepaalde property bestaat?
crisp schreef op donderdag 20 mei 2010 @ 12:04:
[...]

Qua global namespace pollution doet Mootools het inderdaad niet zo best, ik heb daar zelf ook al eens problemen mee ondervonden.

Het extenden van native javascript objecten is echter imo niet altijd verkeerd (zolang je maar van Object.prototype afblijft!), hoewel Mootools dat ook wel in het extreme doorvoert :P
Ik probeer eigenlijk altijd van native prototypes af te blijven, als ik een datatype wil extenden bouw ik er liever omheen aangezien dit een stuk minder vreemde problemen op leverd.

[ Voor 28% gewijzigd door UltimateB op 21-05-2010 02:03 ]

"True skill is when luck becomes a habit"
SWIS

Pagina: 1