1

私は現在、IceFaces 1.8 を使用しており、UI コンポーネントに効果を連鎖させる簡単な方法を見つけようとしています。たとえば、ページの右上に「ヘルプを表示」リンクがあります。クリックすると、ユーザーの特定のコントロールの下にヘルプ テキストが表示されます。このテキストを下にスライドしてから強調表示して表示したいと思います。

Bean に true または false を返す基本的なメソッドがあり、それを使用して、タグの属性isRenderHelp()を使用して効果をレンダリングするため、次のようになります。fire<ice:effect>

<ice:effect effectType="slidedown" fire="#{myBean.renderHelp}">

<ice:effect effectType="slideup" fire="#{!myBean.renderHelp}">

これにより、ヘルプ リンクが Bean の renderHelp フラグをトグルすると、ヘルプ セクションがスライド インおよびスライド アウトします。リンクが最初にクリックされる前に renderHelp が null を返す小さな例外があり、最初のページのレンダリングでスライドアップ アニメーションが起動されないようにします。

EffectQueueさて、1.8 のショーケース コードを調べてみると、 Effect を拡張するクラスがあることに気付きました。これにより、Bean のキューに複数のエフェクトを追加し、getEffectメソッドからキューを返して、それを panelGroupeffect属性に割り当てることができます。ただし、優先順位が設定されているにもかかわらず、キュー内のイベントは実行されません。確かに使い方が下手だし、どう使うべきか悩んでいます。

通常、この種のものには jQuery を使用しますが、UI は多くの部分送信を使用します。私たちのページは Liferay ポートレットを介して表示されるため、partialSubmit でビューが再レンダリングされ、jQuery による DOM への変更が取り消されます。

では、IceFaces 1.8 でエフェクトをチェーンする簡単な方法はありますか? 提案?

4

1 に答える 1

3

これは、テキストを表示およびフェードするために effectQueue を実装する方法です。

private EffectQueue effectQueue;
public Effect getSaveSettingsEffect() {
    return effectQueue;
}
public void fireEffect(ActionListener e) {
    if(effectQueue == null) {
        effectQueue = new EffectQueue("apperAndFade");
        Appear appear = new Appear();
        appear.setDuration(2);
        effectQueue.add(appear);
        Fade fade = new Fade();
        fade.setDuration(3);
        effectQueue.add(fade);
        effectQueue.setTransitory(true);
    }
    effectQueue.setFired(false);
}

フェイスレット:

<ice:commandButton value="fireEffect" action="#{bean.fireEffect}"/>
<ice:outputText value="text" style="display: none;" effect="#{bean.effectQueue}"/>
于 2012-08-16T08:14:53.853 に答える