1

現在、カスタム multiefield を含む AEM コンポーネントに取り組んでいますが、解決方法がわからない問題に直面しました。multiefield に multiefield を含めることができるカスタム ウィジェットを作成しました。読んだドキュメントから、私が理解したように、これにはウィジェット API 構成のデフォルト構成はありません。

私のダイアログノード:

<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>

必要な最小のマルチフィールドと最大を設定したいことを除いて、ウィジェットは正常に動作しています。Web で例を見つけましたが、その方法がよくわかりません。以下のコードを見てください。

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;
    }
}

私のカスタムマルチフィールド、またはその他のアイデアでこれを達成する方法を誰かが説明できれば素晴らしいと思いますか? ご不明な点がございましたら、お知らせください。

4

1 に答える 1

3

クラシック 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 ウィジェット API ドキュメントにリストされています。たとえば、Dialog APIを見ると、すべての公開イベントが表示されます。

カスタム ウィジェットについてコメントすることはできませんが、この JavaScript の例を上記のダイアログ リスナーと組み合わせて使用​​すると、 と のカスタム プロパティを持つすべてのマルチフィールドが検証されmaxLimitますminLimit

ダイアログ:

<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;
    }
  }
}
于 2016-06-17T15:45:35.120 に答える