2011-03-04 3 views
3

ために、繰り返しますのVisualforce、アペックス:これは私がずっとプレーを取得していないSalesforceの開発ボード上で聞かれる質問の拡張であるJavascriptの配列を更新

私は負荷を頻繁に変更する必要がVisualforceページを持っています新しい情報をコントローラから取得し、その情報をJavascript配列に埋め込んで使用することができます。

海流ソリューション:私はお勧めのタグでのArray.push Javascriptを囲むhttp://wiki.developerforce.com/index.php/Using_Browser_Technologies_in_Visualforce_-_Part_1

:rI'veは、成功(ウィキに)ここで説明するようVisualforceの 'ブラウザ技術' を使用していた

<apex:repeat value="{!Object}" var="objects">  
    d.push({ 
       element1: "{!objects.id}"    
    }) 
</apex:repeat> 

問題:ページ全体のリフレッシュが行われたときに配列が正しく挿入され、オブジェクトのフィルタを変更するために 'ドロップダウン'を使用すると、DOMが更新されます(新しい情報がページ)、

最終的には、ページ全体でリフレッシュを呼び出さない限り、Javascript配列は値を変更しません。これは、部分リフレッシュを無効にするもので、ユーザーにはシステムに大きなショックです。

この '必要な投稿'の問題は以前は問題ではなく、DOM配列の更新後にこの配列集団を含むJavascript関数を直接呼び出しても、JavaScript配列は変更されません。

+0

「パーシャルリフレッシュ」とは、AJAXコールを意味しますか? – Shad

+0

Visualforceには、 "javascript" ajaxパネルとしてレンダリングされる "UpdatePanel"というマークアップコンポーネントがあります。ページがレンダリングされ、ajaxパネルが呼び出され、情報(この場合はJavascript配列コンポーネントが再ロードされます。 –

答えて

5

?それは一度バックDOMときにページが最初の記事で何に基づいて、変更することはできません。

思考をロードしています、あなたがあなたの配列がoutputpanelでリフレッシュラップそれを取得したときに制御し、配置する場合そのIDはデータの更新が必要なものすべてのrerender属性に含まれています。すべてのdomが再更新されたときにカスタムjQuery入力リスナーを再接続するために以前これを使用しなければなりませんでした。

<apex:commandButton action="{!something}" rerender="scriptPanel"/> 
<apex:outputPanel id="scriptPanel> 
    <script> 
    d = new Array(); 
    <apex:repeat value="{!objects}" var="object"> 
     d.push({ 
      element1: "{!objects.id}"    
     }); 
    </apex:repeat> 
    </script> 
</apex:outputPanel> 
+0

** Ralph **ありがとうございました。実際に新しい値を反映するように配列を取得する問題が発生しました。配列の要素が変更されたときに起動するjQueryリスナをアタッチすることはできますか? –

関連する問題