在 CQ5 中设置自定义多字段元素的最小值和最大值?

Set a minimum and maximum for custom multifield elements in CQ5?

我目前正在开发一个包含自定义多场的 AEM 组件,我遇到了一个我不知道如何解决的问题。 我为此创建了一个自定义小部件,允许在 multiefield 中包含 multiefield。从阅读的文档中,据我了解,小部件 API config.

没有默认配置

我的对话节点:

<questions
    jcr:primaryType="cq:Widget"
    xtype="panel"
    title="Questions">
    <items jcr:primaryType="cq:WidgetCollection">
        <quiz-data
                jcr:primaryType="cq:Widget"
                fieldDescription="Click the '+' to add a new data"
                fieldLabel="Quiz"
                name="./quizData"
                xtype="multifield">
            <fieldConfig
                    jcr:primaryType="cq:Widget"
                    xtype="apps.mypath.widgets.MultieField"/>
        </quiz-data>
    </items>
</questions>

小部件工作正常,除了我想设置所需的最小多字段和最大字段。我在网上找到了一个例子,但我不太明白该怎么做,看看下面的代码:

myNamespace = {};
myNamespace.myCustomFunction = function (dialog) {
    var isValid = function () {
        var valStatus = true;
        ... custom JavaScript/jQuery to check if 3 items exist ...
        return valStatus;
    };
    if (!isValid()) {
        CQ.Ext.Msg.show({title: 'Validation Error', msg: 'Must contain at least 3 items!', buttons: CQ.Ext.MessageBox.OK, icon: CQ.Ext.MessageBox.ERROR});
        return false;
    } else {
        return true;
    }
}

如果有人能解释我如何为我的自定义多场或任何其他想法实现这一点,那就太好了?如果您有任何问题,请告诉我。

要在经典 UI 中实现 JavaScript,您将使用监听器。例如:

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0"
          xmlns:jcr="http://www.jcp.org/jcr/1.0"
          xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
          jcr:primaryType="cq:Dialog"
          height="600"
          width="600"
          title="My Component"
          xtype="dialog">
    <listeners
        jcr:primaryType="nt:unstructured"
        beforesubmit="function(dialog){ return myNamespace.myCustomFunction(dialog); }"/>
    <items jcr:primaryType="cq:TabPanel">
        <items jcr:primaryType="cq:WidgetCollection">
        </items>
    </items>
</jcr:root>

您可以使用的所有侦听器都列在 CQ Widgets API documentation. For example, if you look at the Dialog API 中,您将看到所有 Public 事件。

我无法对您的自定义小部件发表评论,但是这个 JavaScript 示例在与上面的对话框侦听器结合使用时,将使用 maxLimit 和 [= 的自定义属性验证您的所有多字段14=]。

对话框:

<quiz-data
    jcr:primaryType="cq:Widget"
    fieldDescription="Click the '+' to add a new data"
    fieldLabel="Quiz"
    name="./quizData"
    minLimit="2"
    maxLimit="4"
    xtype="multifield">
    <fieldConfig
        jcr:primaryType="cq:Widget"
        xtype="textfield"/>
</quiz-data>

JavaScript:

var myNamespace = myNamespace || {};

myNamespace.myCustomFunction(dialog){
  var multifields
      field,
      max,
      min,
      length,
      x;

  multifields = dialog.findByType('multifield');

  for (x = 0; x < multifields.length; x++) {

    field = multifields[x];
    max = parseInt(field.maxLimit, 10);
    min = parseInt(field.minLimit, 10);
    length = field.getValue().length;

    if (max && length > max) {
      CQ.Ext.Msg.show({
        title: 'Validation Error',
        msg: field.fieldLabel + ' must have no more than ' + max + ' items.',
        buttons: CQ.Ext.MessageBox.OK, icon: CQ.Ext.MessageBox.ERROR});
      return false;
    } else if (min && length < min) {
      CQ.Ext.Msg.show({
        title: 'Validation Error',
        msg: field.fieldLabel + ' must have at least ' + min + ' items.',
        buttons: CQ.Ext.MessageBox.OK, icon: CQ.Ext.MessageBox.ERROR});
      return false;
    }
  }
}