如何限制CQ5中多字段中的元素数量?

时间:2012-04-04 20:36:58

标签: element limit cq5 day-cq

我用Day CQ5开发网站并遇到了问题。 我正在创建一个组件,以及它的对话。我在对话框中使用组件元素“multifield”,其中包含几个元素“pathfield”。如何设置特定数量的元素“pathfield”并删除按钮“+”和“ - ”?

5 个答案:

答案 0 :(得分:5)

本周我遇到了这个确切的问题:)

默认情况下,您似乎无法限制编辑器可以输入的项目数。为解决此问题,我创建了位于

的Multifield.js的叠加层
/apps/cq/ui/widgets/source/widgets/form/MultiField.js

我在多字段下的fieldConfig节点上添加了对'limit'属性集的检查。如果存在&不为零,它将使用它作为用户可以添加的最大字段数。

不希望通过发布完整叠加层来解决版权问题,但我所做的更改如下:

在构造函数(第53行)中,添加一个检查以从fieldConfig节点获取limit的值:

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是允许的最大字段数'。

简单的改变,但做的工作!希望这是有用的。

答案 1 :(得分: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;
        }
    }
}

先决条件:将限制值添加到multifield的fieldConfig。

答案 2 :(得分:0)

我还没有找到解决这个问题的标准解决方案,但是提出了一个小技巧。首先,我通过组件对话添加所需数量的子元素。然后我将属性“class”添加到元素“multifield”,例如“sliderpanel-dialog-multifield”。然后我添加组件CSS样式这样的构造:

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

“。x-btn”是使用CQ5中的按钮的类。之后,按钮将被隐藏,您无法在多字段中添加或删除元素。我有另一个建议,这个问题可以在听众和脚本的帮助下解决,但我将在上面引用它将更难解决。到目前为止,我一直关注这个变种,但如果你有其他想法,我会非常有兴趣了解它们。

答案 3 :(得分:0)

beforeadd解决方案似乎存在问题:表单/对话框变为无效状态,告诉我们更正标记的字段......但一切都正确。

有没有办法重新初始化表单验证?

答案 4 :(得分:0)

在达到限制后,通过删除“添加项目”按钮,参阅此帖子,我已实现了该功能。

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

然而,实施过程是:

  1. 将限制**(长)**属性添加到fieldConfig节点
  2. 将侦听器节点添加到多字段xtype并添加以下侦听器。
  3. 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