我的XPages之一有很多设计元素.根据连接速度,页面加载的时间超过预期.我想创建一个指示器来显示已登录的用户"页面正在加载"...我做了部分刷新,它工作得很好,但我无法完全刷新.我一直在寻找解决方案.我可以尝试jquery,dojo或ajax.
任何建议都很重要.关心CA.
我还没有为它做过专门的NotesIn9演出,但我在这个TLCC网络研讨会上做了一个技术演示.
https://www.youtube.com/watch?v=jBaRSM9Ng_o&index=3&list=PL9nOJ-QrsuFa00dOsdE6EDh_l2fkiYD0D
相关部分在26分钟左右开始.
我在加载页面初始化时这样做,但我确信如果你已经在页面上,可以进行全面刷新.
基本概念是在页面加载时,您实际上并未加载任何长时间运行的数据.您刚刚发送了页面的shell,然后在onClientLoad事件中触发了部分刷新.
<xp:this.resources>
<xp:script src="/xpUtilities.jss" clientSide="false"></xp:script>
<xp:dojoModule name="extlib.dijit.ExtLib"></xp:dojoModule>
<xp:dojoModule name="extlib.dijit.Loading"></xp:dojoModule>
<xp:styleSheet href="/app.css"></xp:styleSheet>
</xp:this.resources>
Page 1
<xp:this.beforePageLoad><![CDATA[#{javascript:viewScope.put("vsHasData", false);}]]></xp:this.beforePageLoad>
  -  Header UI goes here....<xp:br></xp:br>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:panel id="MainContentWrapper">
<xp:panel id="MainContent">
<xp:this.rendered><![CDATA[#{javascript:return viewScope.get("vsHasData");}]]></xp:this.rendered>
<xp:br></xp:br>
<xp:repeat id="repeat1" rows="100" var="rowData"
indexVar="rowIdx">
<xp:this.value><![CDATA[#{javascript:viewScope.get("vsStateMap").keySet()}]]></xp:this.value>
<xp:text escape="true" id="computedField2"
value="#{rowData}">
</xp:text>
-
<xp:text escape="true" id="computedField3">
<xp:this.value><![CDATA[#{javascript:viewScope.get("vsStateMap").get(rowData)}]]></xp:this.value>
<xp:this.converter>
<xp:convertNumber type="number"
integerOnly="true">
</xp:convertNumber>
</xp:this.converter>
</xp:text>
<xp:br></xp:br>
</xp:repeat>
<xp:br></xp:br>
<xp:br></xp:br>
</xp:panel>
</xp:panel>
<xp:eventHandler event="onClientLoad" submit="true" refreshMode="partial" refreshId="MainContentWrapper">
<xp:this.action><![CDATA[#{javascript:return getStateTotals();}]]></xp:this.action>
<xp:this.onStart><![CDATA[XSP.startAjaxLoading("Calculating State Totals. This may take a few moments.")]]></xp:this.onStart>
<xp:this.onComplete><![CDATA[XSP.endAjaxLoading()]]></xp:this.onComplete>
<xp:this.onError><![CDATA[XSP.endAjaxLoading()]]></xp:this.onError>
</xp:eventHandler>
Run Code Online (Sandbox Code Playgroud)
这是一个演示页面.要查看的内容是添加的dojo资源,事实上我开始隐藏"MainContent"与范围变量,然后结束onClientLoad位.
因此页面加载,但生成重复控件的数据不会运行,因为它位于非渲染面板中.这样用户就可以立即访问该页面.然后onClientLoad踢 - 启动它显示一个"请等待"的东西,然后运行该函数来获取数据.当数据完成后,我设置了一个scopedVariable,然后显示mainContent区域,然后endAjaxLoading的东西触发,一切都显示出来.
| 归档时间: |
|
| 查看次数: |
832 次 |
| 最近记录: |