Cum se creează și se elimină tooltip-ul funcției deschise - dotnetninja

Recent, a trebuit să pun în aplicare instrucțiuni pentru obiecte vectoriale pe harta OpenLayers. Așa cum am descris la mail-archive.com. dar, pe măsură ce trece prin harta a apărut o eroare în metoda de obiect ascunde OpenLayers.Popup (), după prima apariție a tooltip ««this.div.style»- este nulă sau nu un obiect“ sau «this.div este nulă».







map.addLayer (markeri);
// creați selectați pentru tooltips (Opțiunea Tooltip pentru OpenLayers)
var highlightCtrl = new OpenLayers.Control.SelectFeature (markeri, hover: true,
highlightOnly: true,
renderIntent: "temporar",
EventListeners: featurehighlighted: tooltipSelect,
featureunhighlighted: tooltipUnselect
>
>);
// adăugați controlul pe hartă
map.addControl (highlightCtrl);
// activați controlul tipului de instrument
highlightCtrl.activate ();

function tooltipSelect (args) daca (typeof args.feature.tooltip! = 'undefined' args.feature.tooltip! = null) retur;
>
// eliminați indicația dacă există
dacă (tooltipPopup! = null) map.removePopup (tooltipPopup);
tooltipPopup.destroy ();
tooltipPopup = null;
>
var htmlContent = ''+ Args.feature.attributes.name +'


„;
var centru = args.feature.geometry.getBounds (). getCenterLonLat ();
tooltipPopup = nou OpenLayers.Popup ('activetooltip',
centru,
noul OpenLayers.Size (240, 25),
htmlContent,
fals);
tooltipPopup.closeOnMove = true;
tooltipPopup.autoSize = true;
// set stil stil instrument
tooltipPopup.backgroundColor = '# 000';
tooltipPopup.opacity = 0.85;
// jQuery wrapper
$ (tooltipPopup.div) .css ("limita-lățime": "1px",
"Culoare frontală": "# 000",
"Border-radius": "4px",
"Stilul de frontieră": "solid",
"Padding": "1px",
Margine-stânga: "10px",
'Margin-top': '4px'
>);
// jQuery wrapper
$ (tooltipPopup.contentDiv) .css ("overflow": "hidden",
"Padding": "8px",
Culoare: "#fff"
>);
args.feature.tooltip = tooltipPopup;






map.addPopup (args.feature.tooltip);
>
funcționează tooltipUnselect (args) în cazul în care (args.feature.tooltip typeof! == 'nedefinite' args.feature.tooltip == null) map.removePopup (args.feature.tooltip) !;
args.feature.tooltip.destroy ();
args.feature.tooltip = null;
tooltipPopup = null;
>
>
[/ code]

Eroarea a fost găsită în codul sursă al OpenLayers și exemplele pentru OpenLayers.Popup. Cele OpenLayers 2.11 eroare apare în continuare: toate exemplele pe care le-am văzut magazin a creat o fereastra pop-up în matrice asociative, iar atunci când re-clic pe cheia pentru a ieși de acolo și de a schimba doar conținutul (ceva de genul unui Pool dicționar sau șablonul de obiecte, în cazul în care stabilirea obiect - o operație complexă și prin urmare obiecte inutile sunt "curățate" și puse într-un "rucsac"). Poate că aceasta este ideea potrivită - dar am decis să salvez o memorie și să șterg complet pop-ul.

map.addLayer (markeri);
// creați selectați pentru tooltips (Opțiunea Tooltip pentru OpenLayers)
var highlightCtrl = new OpenLayers.Control.SelectFeature (marcatori, hover: true,
highlightOnly: true,
renderIntent: "temporar",
EventListeners: featurehighlighted: tooltipSelect,
featureunhighlighted: tooltipUnselect
>
>);
// adăugați controlul pe hartă
map.addControl (highlightCtrl);
// activați controlul tipului de instrument
highlightCtrl.activate ();

function tooltipSelect (args) daca (typeof args.feature.tooltip! = 'undefined' args.feature.tooltip! = null) retur;
>
// eliminați indicația dacă există
dacă (tooltipPopup! = null) map.removePopup (tooltipPopup);
tooltipPopup.destroy ();
tooltipPopup = null;
>
var htmlContent = ''+ Args.feature.attributes.name +'


„;
var centru = args.feature.geometry.getBounds (). getCenterLonLat ();
tooltipPopup = nou OpenLayers.Popup ('activetooltip',
centru,
noul OpenLayers.Size (240, 25),
htmlContent,
fals);
tooltipPopup.closeOnMove = true;
tooltipPopup.autoSize = true;
// set stil stil instrument
tooltipPopup.backgroundColor = '# 000';
tooltipPopup.opacity = 0.85;
// jQuery wrapper
$ (tooltipPopup.div) .css ("limita-lățime": "1px",
"Culoare frontală": "# 000",
"Border-radius": "4px",
"Stilul de frontieră": "solid",
"Padding": "1px",
Margine-stânga: "10px",
'Margin-top': '4px'
>);
// jQuery wrapper
$ (tooltipPopup.contentDiv) .css ("overflow": "hidden",
"Padding": "8px",
Culoare: "#fff"
>);
args.feature.tooltip = tooltipPopup;
map.addPopup (args.feature.tooltip);
>
funcția tooltipUnselect (args) dacă (typeof args.feature.tooltip! == 'undefined' args.feature.tooltip! == null) map.removePopup (args.feature.tooltip);
// fix: proprietatea hărții
args.feature.tooltip.map = hartă;
args.feature.tooltip.destroy ();
args.feature.tooltip = null;
tooltipPopup = null;
>
>
[/ code]







Trimiteți-le prietenilor: