2009-08-13 10 views
0

私はの氷の表面とそれにはのjavascriptブリッジの問題に直面しています。 私はサーバー側で変更を加えた後、このブリッジによってどのような変更が加えられたのか分かりません。例えば氷の表面とJavaScriptの橋

可視属性= "#{bean.customPopUp}" とマイページにpanelPopup成分:私は氷を持っています。私が「bean.customPopUp」を「true」に変更した場合、ポップアップが正しく表示されますが、私が知る必要があることは:クライアントで何が起こったか、つまりポップアップが表示されているかどうかを知る必要があります。私はJavaScriptを使用してクライアント処理を行う必要があります

+0

私はあなたの質問を正しく理解しているかどうかはわかりませんが、ICEfacesにJavaScriptが必要かどうかを知りたければ、答えは間違いなくはいです。これらの「部分リフレッシュ」では、DOMを変更するためにクライアント側でJavaScriptが必要です。 とにかく、ICEfacesのJavaScriptブリッジについてもっと知りたいことを述べてください。 –

+0

私の悪い英語をありがとう&ごめんなさい。 私はice:panelPopupを使用します。このポップアップがいつ表示されるかを知る必要があります。私はポップアップが表示された後にいくつかのJSをする必要があるので、私にそれを伝えるためのフラグやヒントが必要です。 Ice.onSendReceiveを使用しますが、ポップアップが表示される前に起動します。 私は試しました: Ice.onSendReceive( 'document:body'、 window.setTimeout( "detectPopUp()"、1000); }); detectPopUp():IDを使用してポップアップを取得します。 しかし、私はそれが完璧な方法ではないと思うし、毎回動作しません。 私は試しました JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance()、 "detectPopUp()");私の豆の中で が働いていません。 どうすればいいですか – Saeed

答えて

0

私はコンポーネントレベルのコールバックの解決法も探しています。この問題に対する良い解決策はないようです。私は自分のコンポーネントへの更新を検出した後に自分のタスクを処理するJavascriptで再帰ポーリング機能を開始することに頼ってきました。私のバッキングBeanはpoller()を起動し、コンポーネントの更新が発生するまで500msごとに実行されます。

var pollingCount = 0; 
var previousValue; 

function poller() { 
    // Kill poller after 30 seconds 
    if (pollingCount >= 60) { 
     pollingCount = 0; 
     return; 
    } 

    var currentValue = document.getElementById('myInputElement').value; 
    if (previousValue != currentValue) { 
     previousValue = currentValue; 
     pollingCount = 0; 
     myFunction(); 
    } 
    else { 
     pollingCount++; 
     setTimeout('poller()', 500); 
    } 
} 

私のバッキングBean:

updateDataModel(); // Causes 'myInputElement' component to update 

FacesContext fc = FacesContext.getCurrentInstance(); 
JavascriptContext.addJavascriptCall(fc, "poller();"); 

を私は非常にこのソリューションを好きではないが、この時点ですべての偉大な答えがあるように表示されません。