Я пишу Jenkins Builder, и в сценарии желе для его настройки на странице конфигурации сборки у меня есть некоторый Javascript, который я хочу запустить при загрузке формы, чтобы выполнить поиск на сервере и получить некоторую информацию, чтобы помочь пользователю с их настройка, которая также будет выполняться при изменении пользователем значений формы.
Раньше я получал ссылки на элементы формы, передавая this
функциям в атрибутах onchange
или onkeyup
. Однако теперь я хочу запустить какой-то скрипт, даже если форма не изменилась.
Я знаю, что могу установить атрибуты ID для элементов формы, однако это не сработает, если пользователи добавят в сборку два этапа сборки, используя этот конструктор.
Я попытался сгенерировать случайный идентификатор в своем классе строителя, а затем использовать его для создания идентификаторов для элементов и записать его в некоторый Javascript в файле желе, чтобы я мог найти там эти элементы, но это не инициализируется до тех пор, пока пользователь сохраняет, поэтому он не будет работать, если пользователь добавит два экземпляра этого построителя без сохранения задания:
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<f:entry title="Entry 1">
<f:textbox field="field1" id="${instance.id}-field1" onchange="fieldChanged('${instance.id}-field1')"/>
</f:entry>
<script type="text/javascript">
function fieldChanged(elementId) {
...
}
fieldChanged('${instance.id}-field1');
</script>
</j:jelly>
Существуют ли какие-либо соглашения о том, как делать подобные вещи? Что-нибудь встроенное в Jenkins/jelly для поддержки нескольких экземпляров одного и того же файла jelly, которые могут ссылаться на свои собственные элементы?