4

これは、Salesforce 開発者ボードで私が尋ねた質問の延長です。

コントローラーから新しい情報をロードし、その情報をさらに使用するために Javascript 配列に埋め込むために頻繁に変更する必要がある VisualForce ページがあります。

現在の解決策: ここ (Wiki) で説明されているように、VisualForce 'Browser Technologies' を使用して成功しました: http://wiki.developerforce.com/index.php/Using_Browser_Technologies_in_Visualforce_-_Part_1

Javascript の array.push を推奨タグで囲みます。

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

問題: ページ全体が更新されたときに配列が正しく読み込まれ、「ドロップダウン」を使用して (コントローラーで) オブジェクトのフィルターを変更すると、DOM が更新されます (新しい情報がページに配置されていることがわかります)。 )、

ただし、最終的には、ページ全体で更新を呼び出さない限り、Javascript 配列の値は変更されません。これは、部分的な更新を打ち負かし、ユーザーにとってシステムに衝撃を与えます。

この「必要な投稿」の問題は、以前は問題ではありませんでした。DOM が更新された後に、この配列の人口を含む Javascript 関数を直接呼び出しても、Javascript 配列は変更されません (したがって、一度読み込まれると想定しています)。ページが最初にポストバックされ、変更できないときの DOM の内容に基づいています。

考え?

4

1 に答える 1

5

配列がいつ更新されるかを制御する場合は、配列を出力パネルにラップし、その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>
于 2011-03-16T03:25:53.057 に答える