2016-08-02 3 views
4

私は簡単化したいAEMプロジェクトの構成を持っています。カスタムウィジェットを使用せずに、1つのダイアログフィールドを複数のJCRプロパティにマップできますか?

設定は2人のユーザーグループによって変更できます。 1つはパラメータのセットを細かく制御する必要があり、もう1つは単一のパラメータだけを気にする。

フィールドを表示/非表示にするカスタムのExt JSプラグインを作成するのではなく、通常モードと簡易モードを切り替えるための追加フィールドを追加する代わりに、詳細設定にあまり関心がないユーザーのために別のコンポーネントを作成することにしました。私dialog.xml

は、フル機能のコンポーネントで、私は次のフィールド持っている:

    :単純化されたコンポーネントのダイアログで

    <field1 
        jcr:primaryType="cq:Widget" 
        allowBlank="false" 
        fieldLabel="Field 1" 
        name="./field1" 
        xtype="selection" 
        type="select" 
        options="/bin/myapp/fancyOptions.json" /> 
    <field2 
        jcr:primaryType="cq:Widget" 
        allowBlank="false" 
        fieldLabel="Field 2" 
        name="./field2" 
        xtype="selection" 
        type="select" 
        options="/bin/myapp/fancyOptions.json" /> 
    <field3 
        jcr:primaryType="cq:Widget" 
        allowBlank="false" 
        fieldLabel="Field 3" 
        name="./field3" 
        xtype="selection" 
        type="select" 
        options="/bin/myapp/fancyOptions.json" /> 
    

    を、私は単一のフィールドを必要とします

  • フィールド

一方フィールドの値が1フィールド2フィールド3フィールドの値から推測する必要があります(この場合は、すべての3つのフィールドが同じ値を持つ必要があります)

私は別のスリングモデルを導入する必要はありませんまたは他のどのAdaptableであっても、コンテンツ構造を一貫して維持して、バックエンドでの消費を容易にしたいと考えています。

- myComponent 
    - field1 
    - field2 
    - field3 

別途それらを投稿するカスタムのExt JSウィジェットを作成することなく、コンテンツリポジトリで複数のプロパティにクラシックUIダイアログで一つのフィールドをマップするために離れていますか?私は1つ書くことができましたが、可能ならば避けたいと思います。

答えて

2

はい、可能です。 SlingPostServletは、a parameter called @ValueFromをサポートしています。これにより、異なるフィールドの値に基づいてコンテンツリポジトリ内のプロパティのコンテンツを生成できます。ここで

は、私の場合には右のHTMLフォームにマップ(部分)ダイアログの定義です:何らかの理由で

<field1 
    jcr:primaryType="cq:Widget" 
    allowBlank="false" 
    fieldLabel="Field 1" 
    name="./field1" 
    xtype="selection" 
    type="select" 
    options="/bin/myapp/fancyOptions.json" /> 
<field2 
    jcr:primaryType="cq:Widget" 
    xtype="hidden" 
    name="./[email protected]" 
    value="./field1" 
    defaultValue="./field1" /> 
<field3 
    jcr:primaryType="cq:Widget" 
    xtype="hidden" 
    name="./[email protected]" 
    value="./field1" 
    defaultValue="./field1" /> 

valuedefaultValueの両方が設定されている場合、これはのみ動作します。 defaultValueだけを設定すると、新しく作成されたコンポーネントに対してこの作業が行われますが、次にダイアログが開かれるたびに、リポジトリからデータを読み込み、期待値を消去します。同時に、valueプロパティを設定するだけで、ダイアログが最初に開かれたときにダイアログが要素を初期化するのを防ぐことができます。

+0

他のプロパティ値をコピーするだけですか?リンクは「再使用」という言葉を使用しているように見えるので、「関連する」値を解析したり取得したりすることはできません。 –

+0

@ITGum私がそれを理解する方法では、_properties_を読んだりコピーしたりしません。 JSコードは、Slingドキュメントに記載されている形式に準拠したHTML形式をレンダリングします。そのフォームは、Sling POST Servletにポストされます。このサーブレットは、フィールドを解釈し、提供された値に基づいてプロパティを保存します。私の理解は、指定されたフォームパラメータの値をコピーし、それらをコンテンツリポジトリに格納することです。 – toniedzwiedz

関連する問題