seit bereits einiger Zeit verwende ich folgenden Schnippsel, den ich auf des Netzwolfens Internetseite gefunden habe
map.addLayer (new OpenLayers.Layer.PopupMarker('Punkte', {
location: 'data.php',
createIconFromData: function (data) {
switch (data.marker) {
default:
return new OpenLayers.Icon ('icon1.png', {w:40,h:18}, {x:0,y:0});
case '1':
return new OpenLayers.Icon ('icon2.png', {w:50,h:23}, {x:20,y:-10});
case '2':
return new OpenLayers.Icon ('icon3.png',{w:50,h:23}, {x:-50,y:-23});
}
},
createTooltipFromData: function (data) {
return 'xyz';
},
reloadInterval: 20000
}));
Damit lasse ich alle 20 Sekunden die Icons refreshen.
Nun ist es allerdings nötig, dass ich dies nicht nur intervallgesteuert machen kann, sondern irgendwie über eine Funktion, so dass ich beispielsweise beim Anklicken eines Links diese Funktion ausführen kann, welche dann das Layer refreshed (also kein location.reload() sondern nur die Icons neu rendert (nennt man das so?))
Ist jemandem was bekannt, wie man das bewerkstelligen könnte?
Du musst auf den Layer Zugriff haben. Deshalb erst “meinlayer=new OpenLayers.Layer…” und dann erst “map.addLayer(meinlayer);”. In deinem Code ist “test” ja nicht der Layer sondern der Rückgabewert von “map.addLayer()”.
Und der Layer muss als globale Variable verfügbar sein…
var meinlayer;
function init (){
meinlayer=new OpenLayers.Layer.PopupMarker('Punkte',..... <----- da steht kein "var" davor
map.addLayer(meinlayer);
setTimeout(function(){
...
meinlayer.redraw();
...}
hmmm… Kann es sein, dass der refresh zu früh kommt? “map.addLayer(meinlayer)” braucht ja einige Zeit und wenn dann schon meinlayer.redraw() zuschlägt, bevor der Layer geladen und aufgebaut ist… probier doch mal ne Pause dazwischen, oder ein “if(meinlayer){meinlayer.redraw();}” (oder so ähnlich, ungetestet… )