这是我在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上的内容加载一次。
思考?
答案 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>