Entschuldigung für den langen Titel. Ich habe diese Frage vor etwa einer Woche im offiziellen Salesforce-Entwicklerforum gepostet und habe immer noch keine Antworten erhalten, also dachte ich, ich würde mich hier erkundigen, ob ich noch mehr Glück habe.So beheben Sie das durch die eingebettete Analyse verursachte Visualforce-Problem mit dem Überlauf der Navigationsleiste: reportCharts
Ich habe eine Visualforce-Seite. Es funktionierte gut, bis ich ein eingebettetes Piecharts in der oberen rechten Ecke hinzufügte. Nachdem ich diese hinzugefügt, bemerkte ich, dass die navbar begann aus seinem Behälter zu verschütten (es normalerweise soll mich nach unten für weitere Menüpunkte zu einem Rückgang konvertieren)
Hier ist mein VF-Code:
<apex:page controller="SalesGoalsController" sidebar="false">
<apex:stylesheet value="{!$Resource.MapStyles}" />
<apex:includeScript value="{!$Resource.MapSettings}"/>
<apex:includeScript value="{!$Resource.MapTabs}" loadonReady="true"/>
<script type="text/javascript">
// some javascript stuff that initializes some things here
window.onload = function() {
// a bunch of Visualforce.remoting.Manager.invokeAction()
// calls that do not manipulate any elements on the page
// whatsoever and i would never have any reason to suspect
// that this would be what is causing this issue because
// literally all these calls do is populate some arrays
};
</script>
<div class="pagelabel">Maps</div>
<div id="tabsContainer">
<ul class="tabs">
<li class="tab"><a href="#tab1">tab1</a></li>
<li class="tab"><a href="#tab2">tab2</a></li>
</ul>
</div>
<div id="tab1" class="tabcontent">
<div class="topleft">
<div id="tab1Logo">
<apex:image url="{!$Resource.tab1LogoSmall}"/>
</div>
</div>
<div class="topright">
<div id="piechart-world" class="piechart">
<analytics:reportChart reportId="areportIDgoeshere" size="tiny" showRefreshButton="false">
</analytics:reportChart>
</div>
<div id="piechart-us" class="piechart">
<analytics:reportChart reportId="areportIDgoeshere" size="tiny" showRefreshButton="false">
</analytics:reportChart>
</div>
<div id="piechart-ca" class="piechart">
<analytics:reportChart reportId="areportIDgoeshere" size="tiny" showRefreshButton="false">
</analytics:reportChart>
</div>
</div>
<div class="ChartsContainer" >
<font size="3" color="blue">
<p>Opportunities sold this year</p>
<select id="tab1ChartView" onchange="setView(this)">
<option value="world">World</option>
<option value="usa">USA</option>
<option value="canada">Canada</option>
</select>
</font>
<div id="tab1SalesChart" class="saleschart">
</div>
<font size="3" color="blue">
<p>RFQ received this year</p>
</font>
<div id="RFQChart" class="saleschart"></div>
</div>
</div>
<div id="tab2" class="tabcontent">
<div class="topleft">
<div id="tab2Logo">
<apex:image url="{!$Resource.tab2LogoSmall}"/>
</div>
</div>
<div class="topright">
<div id="piechart-world" class="piechart">
<analytics:reportChart reportId="aReportIDgoeshere" size="tiny" showRefreshButton="false">
</analytics:reportChart>
</div>
<div id="piechart-us" class="piechart">
<analytics:reportChart reportId="aReportIDgoeshere" size="tiny" showRefreshButton="false">
</analytics:reportChart>
</div>
<div id="piechart-ca" class="piechart">
<analytics:reportChart reportId="aReportIDgoeshere" size="tiny" showRefreshButton="false">
</analytics:reportChart>
</div>
</div>
<div class="ChartsContainer" >
<font size="3" color="blue">
<p>Opportunities sold this year</p>
<select id="tab2ChartView" onchange="setView(this)">
<option value="world">World</option>
<option value="usa">USA</option>
<option value="canada">Canada</option>
</select>
</font>
<div id="tab2SalesChart" class="saleschart">
</div>
</div>
</div>
</apex:page>
Hier ist meine CSS:
ul.tabs {
overflow: hidden;
border-top: none;
border-left: none;
border-right: none;
border-bottom: 3px solid;
border-color: #1797C0;
padding: 0px;
margin: 0px;
margin-bottom: 10px;
}
li.tab {
list-style-type: none;
float: left;
display; inline;
background-color: inherit;
border: none;
outline: none;
cursor: pointer;
padding: 0px;
margin: 0px;
transition: 0.3s;
}
.tabs a {
padding: 5px 10px;
font-weight: bold;
display: inline-block;
background: #fff;
color: #000;
text-decoration: none;
}
.tabs a:hover {
text-decoration: none;
color: #1797C0;
}
.tabs a.active {
background: #1797C0;
color: #fff;
text-decoration: none;
}
.topleft {
float: left;
position: relative;
width: 100%;
margin-bottom: 10px;
}
.topright {
float: right;
position:absolute;
right:10px;
z-index: 11;
}
.piechart {
display: none;
}
.pagelabel {
position: relative;
font-size: 1.5em;
color: #222;
margin: 10px;
}
.saleschart {
width: 90vw;
height: 90vh;
padding-top: 15px;
}
.logo {
display: inline;
float: left;
}
.chartheader {
color: #0000ff;
font-size: 1.3em;
}
.maptotal {
font-size: 1.5em;
color: #222;
display: inline;
float: right;
width: 60%;
}
ich eine Javascript-Funktion, die im Grunde alle außer einer der Kreisdiagrammen zu Display setzt: keine (Die angezeigte ist die Anzeige: Block), abhängig davon, auf welcher Registerkarte sich der Benutzer befindet. Ich weiß, dass das ziemlich hacky ist, aber ich konnte keinen besseren Weg finden, es zu tun.
function showPiechart(piechart_name) {
var elem_id = "piechart-" + piechart_name;
for (var i=0, elem; elem = piechart_divs[i]; i++) {
if (elem.id == elem_id) {
elem.style.display = "block";
} else {
elem.style.display = "none";
};
};
};
Kann jemand einen Hinweis geben, wie man das löst? Ich bin jetzt am 6. Tag des Wartens auf eine Antwort auf diese Frage und möchte das Problem wirklich lösen. Das Problem hängt mit den Analysen zusammen: reportCharts, die ich der VF-Seite hinzugefügt habe. Es begann erst, nachdem ich diese Berichte hinzugefügt habe. Ich vermute, dass die Art, wie ich sie rendere, irgendwie das Skript stört, das die Menüpunkte zusammenbrechen lassen soll. Ich würde wirklich, wirklich ein Feedback zu diesem Thema schätzen. – ag415
Nun, ich habe es endlich herausgefunden. Stellt sich heraus, dass harmloses Stück Code, das in der 'window.onready = function() {...}' eingeschlossen ist, das ist, was tatsächlich den Fehler auslöst. Dies macht buchstäblich keinen Sinn, da der fragliche Code den Elementen auf der Seite buchstäblich absolut nichts getan hat und das einzige, was er tat, war das Laden einiger Javascript-Arrays mit einigen Daten, die von einer Apex-Methode abgerufen wurden. Offensichtlich entschieden die Salesforce-Entwickler aus irgendeinem dummen Grund, dass dieses Javascript so behandelt werden sollte, als ob es tatsächlich auf der Seite angezeigt würde. – ag415
Um dies zu umgehen, muss ich einen Weg finden, um diesen Code auszuführen, nachdem das Dokument _without window.onload._ window.onready funktioniert zu laden scheint, ohne den Fehler auszulösen, aber nur die Zeit wird zeigen, ob das tatsächlich ein gutes ist Lösung oder nicht. – ag415