Подсказка в Dojo Charting появляется вне графика
Значение для моей всплывающей подсказки отображается вне графика внизу в виде текста. Я вижу похожую проблему в уроках додзё, например. Вот..
https://dojotoolkit.org/documentation/tutorials/1.10/charting/demo/monthly-sales-legend.html
Весь мой код работает нормально, и из разных постов у меня складывается впечатление, что таблица стилей отсутствует, но я все еще не могу точно определить ее. Я включил тему, если она нужна, но она мне не нужна.
Возможно, что-то простое, и я знаю, что здесь есть похожие проблемы, но я проиграл все выходные на этом, поэтому любая помощь будет принята с благодарностью.
Клиентский контроль.
<xp:div id="chartContracts" style="width: 500px; height: 300px;padding- top:8px"></xp:div>
<xp:scriptBlock id="scriptBlock2">
<xp:this.value><![CDATA[
require([
"dojox/charting/Chart",
"dojox/charting/plot2d/Columns",
"dojox/charting/themes/Minty",
"dojox/charting/action2d/Tooltip",
"dojox/charting/axis2d/Default",
"dojo/number",
"dojo/currency",
"dojo/domReady!"
],
function(Chart,Columns,Minty,Tooltip) {
var chart1 = new Chart("#{id:chartContracts}");
chart1.addPlot("default",{type: Columns,gap:2}
);
var tip = new Tooltip(chart1,"default");
// Add axes
var varNames = #{contractBean.axisXAxis};
var funcLabels = function(text) {
return varNames[text];
}
chart1.addAxis("y", {vertical:true,});
chart1.addAxis("x", {labelFunc:funcLabels, font:"normal normal normal 8pt Tahoma",minorTicks:true,rotation:-90, maxLabelCharCount:11,
});
chart1.setTheme(Minty);
var data = #{contractBean.chartContractsData};
for (var key in data) {
chart1.addSeries(key, data[key]);
};
chart1.render();
});]]></xp:this.value>
</xp:scriptBlock>
Управляемый компонент, предоставляющий данные, allContracts - это список объектов Контракта, например. название, стоимость, прибыль и т. д.
public void setChartContracts(){
JsonJavaArray jjaXAxis = new JsonJavaArray();
JsonJavaObject jjoContracts = new JsonJavaObject();
jjaXAxis.add("");
ArrayList<Object> seriesContracts=new ArrayList<Object>();
Iterator<Contract> it = allContracts.iterator();
while(it.hasNext()){
Contract entry = (Contract) it.next();
Double actTO = entry.getActualTO();
if(actTO >999.99){ //We only want contracts with a value greater than 999.99
HashMap<String,Object> mapContracts = new HashMap<String,Object>();
int actProfit = entry.getActualProfit().intValue();
mapContracts.put("y",actProfit);
String col = actProfit<0.00 ? "#ff1a1a" : "#00cc66"; //Colour the columns, green positive red negative.
mapContracts.put("fill",col);
mapContracts.put("stroke","");
mapContracts.put("tooltip","£"+actProfit);
seriesContracts.add(mapContracts);
jjaXAxis.add(entry.getCustomerName());
}
}
jjoContracts.put("contracts",seriesContracts);
chartContractsData = jjoContracts.toString();
System.out.println(chartContractsData);
axisXAxis = jjaXAxis.toString();
}
1 ответ
Не удалась попытка удалить AMD, как предложил Пер, все загружено в темах, и я просто не мог заставить работать различные решения. Поэтому я не могу "использовать оптимизированные во время выполнения ресурсы JS и CSS" в своих приложениях.
Удалось отследить таблицу стилей, которая преодолеет проблему.
/xsp/.ibmxspres/dojoroot-1.9.7/dijit/themes/tundra/tundra.css
Хотя подсказки довольно некрасивые. Потратив долгий путь на это, это придется сделать в данный момент. Я подумал, что выложу решение, хотя оно и не идеально, но работает.
Если у кого-то есть лучшее решение, я был бы очень признателен за это.
Редактировать. Мне удалось получить исправление для AMD в моих темах, - у моих ресурсов был синтаксис, который работал, когда не в режиме AMD, - они пропускали.js,- я не осознавал, что это останавливало их работу при выборе Использовать среду выполнения оптимизированный Javascript... Итак, я смог применить исправление к ресурсам библиотек js DataTable, которые вызывали проблему. С помощью отсюда.. AMD Loader отключить, включить в теме
Мысль, которой я поделюсь, на случай, если кто-то еще потратит часть своей жизни на этот вопрос.
Спасибо Пер, ты был прав, как всегда.