4

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

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

当前解决方案:我已经成功使用 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>

问题:当整个页面刷新填充时,数组被正确填充,当我使用我的“下拉菜单”修改对象上的过滤器(在控制器中)时,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 回答