Добрый день!
У меня есть таблица, где в качестве значений одного из столбцов размещена кнопка. Выглядит это следующим образом:
При нажатии этой кнопки у меня вызывается экран, где я ввожу номера. При нажатии “Ок” в вызванном экране, если номера введены, то мне нужно данную кнопку красить в другой цвет. Если номера не введены, то оставлять таким же цветом.
Подскажите, как мне реализовать такую логику?
Добрый день,
- Сначала создать расширение темы, если у вас его еще нет, чтобы было куда дописывать стили.
- Потом реализовать Style Provider для таблицы, в которой находится эта кнопка. Если сущность в строке соответствует особому условию, то вернуть какое-нибудь название стиля всей строке таблицы или ячейке, где находится кнопка.
- Потом открыть экран и посмотреть с помощью Chrome Developer Tools - DOM-дерево. Найти элемент, который нуждается в закрашивании и определить, по каким стилям его нужно лоцировать, какое полное имя стиля присваивается строке или ячейке, помеченной style provider.
- Написать каскадный CSS в файле темы. Цепочка стилей должна быть такая, чтобы она переопределяла другой существующий стиль, устанавливающий обычный цвет.
- Если стиль после перезапуска не подхватывается, Ctrl+F5 / почистить кэш Chrome.
Примеры, я менял цвет или стиль текста. В themes/helium/styles.scss,
.helium {
// include auto-generated app components SCSS
@include app_components;
@include com_haulmont_xxxxx-helium-ext;
.v-table .v-table-row.xxx,
.v-table .v-table-row-odd.xxx {
font-style: italic;
}
.v-table .v-table-cell-content.foo {
color: green;
}
.v-table .v-table-cell-content.fooz {
color: #AEAE00;
}
}
Александр, добрый день! Спасибо за обратную связь. По пунктам:
- Стиль есть
.v-table-cell-content.commitAndClose {
background-color: rgba(0, 255, 0, 0.15);
}
- Style Provider реализовал следующим образом:
@Install(to = "resultTable", subject = "styleProvider")
private String resultTableStyleProvider(ContractPosition entity, String property) {
return setStyle(entity, property);
}
private String setStyle(ContractPosition entity, String property) {
// установка стиля кнопки "Ввести"
if (!entity.getSerialNumbers().isEmpty() && property.equals("serialNumbers")) {
return "commitAndClose";
}
return null;
}
Подскажите, а можно использовать действие onAfterClose для экрана, в котором ввожу номера? При закрытии экрана это действие будет срабатывать и на другом экране перекрашивать нужную мне кнопку. Так будет работать?
Можно, вам нужно в AfterClose обработчике - поменять какую-то переменную. Это может быть переменная в контроллере экрана или транзиентное поле в сущности, которая лежит в таблице. После этого в том же обработчике вызывать перерисовку таблицы repaint().
В Style Provider ориентироваться на эту переменную.