1

xp:link で onclick イベントを使用する際に問題が発生し、コンテンツを取得するために部分的な更新を実行するツールチップ ダイアログをポップアップするマウスオーバーを使用すると問題が発生します。ユーザーがリンクをクリックしたいときはいつでも、ツールチップがすでにポップアップしてそのコンテンツをロードしている可能性があります。リンクは別のページにリダイレクトされるため、コンテンツ ペインの部分的な更新イベントは中断されています。これにより、ほぼ毎回「xhr cancel」というエラーが発生します (Firebug などのブラウザーのコンソール内で確認できます)。

別のページにリダイレクトする前に contentpane を .cancel() しようとするなど、いくつかのことを試しましたが、おそらく tooltipDialog にあるために機能しないため、ハンドルを取得できません。

以下はコードの例です。Xpages Extension Library demo nsf (データで埋められた) 内の新しい xpage に入れてテストできます。リンクにカーソルを合わせて、ツールチップのコンテンツの読み込みが完了する直前に、リンクをクリックします。

    <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xp:this.data>
        <xp:dominoView var="view1" viewName="AllContacts"></xp:dominoView>
    </xp:this.data>
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xp:link escape="true" text="Hover me" id="link1" style="margin-left:50px;"
        value="/Core_DojoLayout.xsp">
        <xp:this.onmouseover><![CDATA[tooltipTimerId = setTimeout ( "XSP.openTooltipDialog('#{id:tooltipDialog1}','#{id:link1}');", 500 );
                    ]]></xp:this.onmouseover>
        <xp:this.onmouseout><![CDATA[if (tooltipTimerId){
                clearTimeout (tooltipTimerId);
            }]]></xp:this.onmouseout>
    </xp:link>
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xe:tooltipDialog id="tooltipDialog1">
        <xe:djContentPane id="djContentPane1" refreshOnShow="false"
            partialRefresh="true" preload="true">
            <xp:repeat id="repeat1" rows="1000" value="#{view1}"
                var="row">
                <xp:text escape="true" id="computedField1"
                    value="#{row.FirstName}">
                </xp:text>
                &#160;&#160;
                <xp:text escape="true" id="computedField2"
                    value="#{row.LastName}">
                </xp:text>
                <xp:br></xp:br>
            </xp:repeat>
        </xe:djContentPane>
    </xe:tooltipDialog>
</xp:view>
4

2 に答える 2

1

それを私が直した!問題は、何か問題が発生したときに XSP.error が呼び出されることです。見苦しいアラート ボックスは不要なので、このコードで関数を再定義します。XSP メッセージ (私の場合はエラー) がコンソールに記録されます。

    <xp:scriptBlock id="scriptBlock1"
    value="XSP.error = function(err){
            console.error('XSP error : ' + err);
        };">
</xp:scriptBlock>
于 2012-04-20T09:08:09.987 に答える
0

フェリー - 組み合わせる必要はありますか? 別の方法として、リンクの横にアイコンを配置し、そのアイコンにマウスオーバーを追加します (小さな人のアイコンなど)。これにより、組み合わせようとするのではなく、マウスオーバーするものとクリックするものを組み合わせることができます。

もう 1 つのオプションは、リンクと div を親 (テーブルまたは div など) 内に (並べて) 配置し、CSS を使用してリンクの上に div を配置することです。次に、マウスオーバーを DIV に適用すると、ツールチップが更新され、リンクはそのままでクリック可能になります。

それが役立つかどうか教えてください:)

于 2012-04-18T20:55:31.170 に答える