Я поделюсь, как настроен мой пример. Это может отличаться от вашего, но должно действовать как руководство. В моем примере у меня есть HTML-блоки, которые должны переключаться между синим и желтым в зависимости от отсутствия или наличия отрицательного (-) знака.
Шаг первый - настроить CSS для его раскраски, как если бы данные были положительными (синий):
.colorContainerBlue {background: #29A2EF;}
Шаг второй - установить мои вычисленные значения в их собственном div, который находится внутри родительского div "watcher". Это будет очень важно позже при настройке MutationObserver()
:
<!-- Watch for any changes within this div using JS MutationObserver -->
<div id="watcher">
<!-- measure 1 -->
<div id="measure1" style="display:none">
<SpotfireControl id="your_id_here" />
</div>
</div>
Шаг третий - настроить HTML-элемент, содержащий значение. В моем случае это набор flexboxes
, но в вашем случае это просто таблица HTML. Так в моем коде это выглядит так:
<li class="colorContainerBlue valueReturnedFromJS"></li>
Теперь приходит волшебство. Шаг четвертый - настроить файл JS для извлечения вычисленного значения из шага два, описанного выше, посмотреть на него, соответственно изменить цвет класса, а затем передать его обратно в таблицу, пока только работает, когда вычисленное значение изменяется. Это достигается в моем примере следующим образом:
function refreshWidth() {
//measure1
//get values from HTML
MeasureOne = document.getElementById('measure1');
MeasureOneValue= MeasureOne.innerText;
//check for negatives and change background colors (looking for negative sign).
if (MeasureOneValue.indexOf("-") != -1) {
document.getElementsByClassName('colorContainerBlue')[0].style.background = "#FFDB4A";
}
else {
document.getElementsByClassName('colorContainerBlue')[0].style.background = "#29A2EF";
}
//return value to HTML
document.getElementsByClassName('valueReturnedFromJS')[0].innerHTML = MeasureOneValue;
}
//MutationObserver to refresh when needed. Works better than running every second as that causes issues with exporting in newer versions of Spotfire
var target = document.getElementById('watcher');
var observer = new MutationObserver(refreshWidth);
var config = { attributes: true, childList: true, characterData: true, subtree: true};
observer.observe(target, config);
Если вы правильно назвали все имена и в файле JS правильно указали if else
, это должно сработать с некоторыми изменениями для вашего точного примера. Без использования вашего точного файла. .dxp
, я не могу полностью настроить это для вас. Надеюсь, это поможет изложить процесс для подражания!