Вы можете добавить переменную, чтобы сохранить статус диалога.
var isDialogOpen = false;
$('#passwd', $form)
.on('keyup', function(e){
// If dialog is not opening
if(!isNumberKey(e) && !isDialogOpen){
this.value = this.value.substr(0, this.value.length - 1);
BootstrapDialog.alert({message: '<%=rb.getStringForJS("ALERT_PASSWORD_NUMBER")%>', type: BootstrapDialog.TYPE_DANGER });
// Now it is opening
isDialogOpen = true;
}
});
И когда вы закрываете диалог, вы должны изменить статус.
isDialogOpen = false;
Очень хороший вопрос, который приходит в голову всем, когда они начинают работать над созданием потоков данных в NiFi.
Перво-наперво: свойства против атрибутов FlowFile
Как вы сами упоминали в своем вопросе, Properties
- это то, что используется для управления поведением вашего Processor
в то время как Attributes
являются метаданными вашего потока в действии.
Простой пример, возьмем процессор GetFile
. Свойства, которые он предоставляет, такие как Input Directory
, File Filter
и т. Д., Сообщают вашему процессору, где & amp; как искать исходные данные. Когда процессор успешно находит какой-либо источник, соответствующий вашей конфигурации, он запускает поток, то есть генерируется FlowFile
. Этот FlowFile будет нести содержимое исходных данных, а также некоторые метаданные источника, такие как имя файла, размер файла, время последнего изменения и т. Д. Эти метаданные могут реально помочь вам в процессе с вашими последующими процессорами, такими как проверка типа файла и соответственно маршрутизация FlowFile. И обратите внимание, метаданные не являются фиксированными; это отличается с различными процессорами.
Существует несколько основных атрибутов, которые каждый процессор добавил бы, например application.type
, filesize
, uuid
, path
и т. Д.,
. Какова цель позволить пользователям добавлять пользовательские свойства, когда они не добавлены к атрибутам?
Это функция, которую NiFi предлагает процессорам, которые они могут использовать или игнорировать. Не все процессоры позволяют добавлять пользовательские свойства. Только выборочные процессоры.
Давайте возьмем InvokeHttp
в качестве примера. Этот процессор позволяет разработчику создавать собственные свойства. Когда пользователь добавляет новое пользовательское свойство, это свойство добавляется в качестве заголовка к HTTP-вызову, который процессор собирается сделать, потому что процессор построен таким образом. Он ищет любые динамические (пользовательские) свойства. Если они присутствуют, они будут считаться пользовательскими заголовками, которые пользователь хочет отправить.
По крайней мере, в контексте этого процессора не имеет смысла собирать эти данные заголовка в качестве метаданных, потому что они могут быть бесполезны для последующих процессоров, но есть некоторые другие процессоры, которые действуют по-другому, когда предоставляются пользовательские свойства как UpdateAttribute
, единственной целью которого является добавление любого пользовательского свойства в качестве атрибута к входящему FlowFile.