Я разработал сайт с днем CQ5 и столкнулся с проблемой. Я создаю компонент и диалог для него. Я использую в диалоге элемент компонента «multifield», который содержит несколько элементов «pathfield». Как установить определенное количество элементов «pathfield» и удалить кнопки «+» и «-»?Как ограничить количество элементов в multifield в CQ5?
ответ
Я наткнулся на эту точную проблему на этой неделе :)
Кажется, что по умолчанию вы не можете ограничить количество элементов редактор может войти. Чтобы решить эту проблему, я создал накладку Multifield.js помещена в
/apps/cq/ui/widgets/source/widgets/form/MultiField.js
Я добавил чек на свойства «предела», установленных на узле fieldConfig под многопрофильным. Если присутствует & не ноль, он будет использовать это как максимальное количество полей, которые пользователь может добавить.
Не хотите попасть в вопросах авторского права путем размещения полного наложения, но изменения, которые я сделал, где следующим образом:
В конструкторе (строка # 53), добавьте в чек, чтобы получить значение предел от узла fieldConfig:
if (!config.fieldConfig.limit) {
config.fieldConfig.limit = "0";
}
в обработчик для кнопки "+" (строка # 71) изменить функцию на следующее:
if(config.fieldConfig.limit == 0 || list.items.getCount() <= config.fieldConfig.limit) {
list.addItem();
} else {
CQ.Ext.Msg.show({
title: 'Limit reached',
msg: 'You are only allowed to add ' + config.fieldConfig.limit +
' items to this module',
icon:CQ.Ext.MessageBox.WARNING,
buttons: CQ.Ext.Msg.OK
});
}
Вместо удаления кнопок, Я только что создал всплывающее окно, чтобы сообщить редактору, что «N - максимальное количество разрешенных полей».
Простая смена, но делает работу! Надеюсь, это полезно.
Я еще не нашел стандартного решения этой проблемы, но придумал небольшой трюк. Сначала я добавляю необходимое количество дочерних элементов через диалог компонента. И затем я добавляю свойство «класс» к элементу «multifield», например «sliderpanel-dialog-multifield». Затем добавить в компонент CSS-стиль такой конструкции:
.sliderpanel-dialog-multifield .x-btn{
display: none;
}
«.x-BTN» это класс, который использует кнопки в CQ5. После этого кнопки будут скрыты, и вы не сможете добавлять или удалять элементы в multifield. У меня есть другое предположение, что эта проблема может быть решена с помощью слушателей и скриптов, но это будет сложнее решить, о чем я говорил выше. Я до сих пор сосредоточился на этом варианте, но если у вас есть другие идеи, мне было бы очень интересно узнать их.
Вы также можете добавить слушателей параллельно к многоуровневому узлу. Например
Событие: beforeadd
Функция:
function(list,component,index) {
if(this.fieldConfig.limit!=0) {
if(this.fieldConfig.limit == (list.items.getCount()-1)) {
CQ.Ext.Msg.show(
{title: 'Limit reached', msg: 'You are only allowed to add '+this.fieldConfig.limit+' items to this module',icon:CQ.Ext.MessageBox.WARNING,buttons: CQ.Ext.Msg.OK}
);;return false;
}
}
}
Предпосылки: Добавить предельное значение fieldConfig в многопрофильном.
Возможно, проблема с решением beforeadd: форма/диалог переходит в недопустимое состояние, сообщая нам исправить отмеченные поля ... но все правильно.
Есть ли способ повторной инициализации проверки формы?
Обратитесь к этому сообщению, где я реализую функциональность, удалив кнопку «Добавить элемент», как только достигнут предел.
http://letsaem.blogspot.in/2015/12/add-limit-to-number-of-elements-in.html
Однако процесс реализации является:
- предела Добавить ** (длинные) ** свойство fieldConfig узла
- Добавить слушатель узел в многопрофильный xtype и добавьте следующие слушатель ,
removeditem:
function(list) {
var length = list.items.length;
if (length <= list.fieldConfig.limit) {
list.items.items[length - 1].show();
}
}
beforeadd:
function(list, component, index) {
var length = list.items.length;
var addButton = list.items.items[length - 1];
if (length == list.fieldConfig.limit) {
addButton.hide();
}
}
Теперь, если вы даете предел: 3
Кнопка Добавить элемент исчезнет после добавления 3 пунктов
кнопку Добавить пункт исчезает:
вы можете ответить на этот вопрос? http://stackoverflow.com/questions/28361998/how-to-provide-custom-value-on-checkbox-in-cq5-dialog – user2142786