2012-04-04 3 views
7

Я разработал сайт с днем ​​CQ5 и столкнулся с проблемой. Я создаю компонент и диалог для него. Я использую в диалоге элемент компонента «multifield», который содержит несколько элементов «pathfield». Как установить определенное количество элементов «pathfield» и удалить кнопки «+» и «-»?Как ограничить количество элементов в multifield в CQ5?

ответ

5

Я наткнулся на эту точную проблему на этой неделе :)

Кажется, что по умолчанию вы не можете ограничить количество элементов редактор может войти. Чтобы решить эту проблему, я создал накладку 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 - максимальное количество разрешенных полей».

Простая смена, но делает работу! Надеюсь, это полезно.

+0

вы можете ответить на этот вопрос? http://stackoverflow.com/questions/28361998/how-to-provide-custom-value-on-checkbox-in-cq5-dialog – user2142786

0

Я еще не нашел стандартного решения этой проблемы, но придумал небольшой трюк. Сначала я добавляю необходимое количество дочерних элементов через диалог компонента. И затем я добавляю свойство «класс» к элементу «multifield», например «sliderpanel-dialog-multifield». Затем добавить в компонент CSS-стиль такой конструкции:

.sliderpanel-dialog-multifield .x-btn{ 
    display: none; 
} 

«.x-BTN» это класс, который использует кнопки в CQ5. После этого кнопки будут скрыты, и вы не сможете добавлять или удалять элементы в multifield. У меня есть другое предположение, что эта проблема может быть решена с помощью слушателей и скриптов, но это будет сложнее решить, о чем я говорил выше. Я до сих пор сосредоточился на этом варианте, но если у вас есть другие идеи, мне было бы очень интересно узнать их.

2

Вы также можете добавить слушателей параллельно к многоуровневому узлу. Например

Событие: 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 в многопрофильном.

0

Возможно, проблема с решением beforeadd: форма/диалог переходит в недопустимое состояние, сообщая нам исправить отмеченные поля ... но все правильно.

Есть ли способ повторной инициализации проверки формы?

0

Обратитесь к этому сообщению, где я реализую функциональность, удалив кнопку «Добавить элемент», как только достигнут предел.

http://letsaem.blogspot.in/2015/12/add-limit-to-number-of-elements-in.html

Однако процесс реализации является:

  1. предела Добавить ** (длинные) ** свойство fieldConfig узла
  2. Добавить слушатель узел в многопрофильный 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 пунктов

кнопку Добавить пункт исчезает:

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^