VisualForce,Apex:重复,用于Javascript数组更新

时间:2011-03-04 00:26:16

标签: javascript salesforce visualforce apex-code

这是我在Salesforce开发板上提出的问题的扩展,但没有太多发挥:

我有一个VisualForce页面,需要经常更改才能从控制器加载新信息,并将该信息嵌入到Javascript数组中以供进一步使用。

Curent解决方案:我已经成功使用了VisualForce'浏览器技术',如此处所述(在Wiki中):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>

问题:当整个页面刷新填充时,阵列被正确填充,当我使用'dropdown'修改对象上的过滤器(在控制器中)时,DOM被更新(我可以看到放置了新信息)在页面上),

然而,最终,Javascript数组不会更改它的值,除非我在整个页面上调用刷新,这会使部分刷新失败,并且会对用户的系统造成冲击。

此“必要的帖子”问题以前不是问题,甚至在我更新DOM后直接调用包含此数组的Javascript函数时,Javascript数组也不会改变(所以我假设当页面最初回发并且无法更改时,它会根据DOM上的内容加载一次。

思考?

1 个答案:

答案 0 :(得分:5)

如果要控制数组何时刷新,请将其包装在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>