2016-05-10 9 views
0

クライアント側の機能を追加することで、データビューの外観と感触を少し改善しています。 この場合、スクリプトを作ったので、ユーザーが行の上にカーソルを置いて詳細を表示します。 構造のようなものになります。スクリプトブロックを使用したXPageパーシャルリフレッシュ

Structure

スクリプトブロックは、いくつかの基本的なjqueryのが含まれています。私が、行拡大/縮小ボタンのいずれかをクリックするまで

function x$(idTag){ 
    idTag = idTag.replace(/:/gi, "\\:"); 
    return("#"+idTag); 
} 

var dataView = x$('#{id:dataView1}'); 

var detail; 
$(dataView + ' > table > tbody > tr').mouseenter(function (e) { 
    detail = $(this).attr('id').replace(':_row', '_detail'); 
    detail = x$(detail); 

    $(detail).show(); 
}); 

$(dataView + ' > table > tbody > tr').mouseleave(function() { 
    $(detail).hide(); 
}); 

すべてが、正常に動作しますがスクリプトコードの動作が停止することを示します。 私の推測では、部分的なリフレッシュと関係があります。これは、データビューでレベルを展開または折りたたんだり、スクリプトブロックを再ロードしたり、間違って再ロードしたりしないときに起こります。 パーシャルリフレッシュをオフにすると、後で処理が続行されますが、行を展開または折りたたむだけでページ全体をリフレッシュするのは遅すぎ、現実的に使用できません。

アイデアはありますか?

+1

スクリプトブロックは、部分的に更新される領域の内側に配置する必要があります。 –

答えて

0

を試してみてください別のソースのおかげでここに助けるために迅速なハックを得ました。

パネルにdataViewとscriptBlockの両方を配置し、dataViewのrefreshIDをパネルのIDに設定します。

+0

私のコメントにインスパイアされていますか? :-) –

+0

@PerHenrikLausten別のXpageデベロッパーがスラックチャットでこのアイディアを思いついたのですが、あなたのコメントは明らかに同じトラックにあります。フィードバックをお寄せいただきありがとうございます。 –

0

jQueryコードは、ページ上に表示される項目でのみ実行されます。委任イベントとして実行するように選択条件を変更する必要があります。この場合、データビューの上にマウスイベントを移動するたびに、イベントをトリガしたセレクタが検出され、一致する場合はそれに応じて実行されます。この方法では、partialRefreshの前または後に「ページ上にある」かどうかに関係なく、すべての行で実行されます。

http://api.jquery.com/on/

私は自分の環境を持っていないとしてテストされていません。この代わりに

$(dataView).on ('mouseenter', 'table > tbody > tr', function (e) { 
    detail = $(this).attr('id').replace(':_row', '_detail'); 
    detail = x$(detail); 

    $(detail).show(); 
}); 

$(dataView).on('mouseleave', 'table > tbody > tr', function() { 
    $(detail).hide(); 
}); 

コード:)

+0

あなたはセレクタをより効率的にするために、id属性を_rowで探すこともできると思います。おそらく違いは気付かないでしょう – MarkyRoden

+0

それを試しましたが、残念ながら同じ結果を得ました。誰かがよりクリーンなソリューションを提供できない限り、以下に投稿した自分自身の小さなハックに固執するつもりです。 –

+0

確かに - 環境を持たないとわかりにくいです - 委任されたイベントを使用することは、スクリプトブロックがリフレッシュされている "内部"でない限り、部分リフレッシュの問題を回避するための方法です。 – MarkyRoden

関連する問題