QBO3无法缓存错误

时间:2018-08-29 17:19:57

标签: javascript caching

昨天,当我尝试刷新QBO3系统中的某些页面时,我注意到了这些警告:

enter image description here

根本原因是什么,如何解决?

1 个答案:

答案 0 :(得分:1)

如果浏览器的sessionStorage已满,则会发生此错误。您可以通过关闭并重新启动浏览器(完全)或发出以下javascript命令来解决该错误:

sessionStorage.clear();

会话存储使您可以使用JavaScript将数据显式存储在用户的硬盘上。用户可以限制存储量,并可以关闭会话存储。如果保留,正确使用的会话存储可以大大提高用户的体验。

会话存储内置在qbo3.AbstractObject javascript类中。每次调用invokeHtml时,结果都保存在缓存中。呈现面板时,qbo3.ObjectBind行为将尝试从会话存储中读取面板结果,并将显示结果(如果有)。

仪表板示例

“评估”信息中心的用户体验是:

  • 导航至评估仪表板(Valuation.ashx/Home
    • 有两个面板:仪表板面板和搜索面板
    • 第一次访问时,两个面板都没有在会话存储中
    • 仪表板面板将通过从服务器请求数据来呈现默认仪表板,并且仪表板结果将保存到会话存储中
    • 由于未发出搜索请求,因此不会呈现搜索面板
    • 单击仪表板内的链接,以呈现相应的结果 在搜索面板中
    • 搜索面板将向服务器请求数据,搜索结果将保存到会话存储中
    • 点击“评估”超链接,离开“评估仪表板”
    • 单击链接以重新访问评估仪表板(或仅 单击返回)
    • 仪表板面板将从会话存储中呈现
    • 搜索面板将从会话存储中呈现,向用户显示其 最后搜索结果

摘要示例

Summary中,我们必须更加注意我们的缓存。如果我们正在缓存“附件”面板,则必须确保不要将“评估附件12345”与“评估23456中的附件”混合使用。这可以通过指定缓存键来完成:

<div id="attachmentList" class="span12" data-behavior="ObjectBind" data-objectbind-options="{{ 
  'class': 'qbo3.AttachmentObject', 
  'cacheKey': 'AttachmentList-Valuation-{//ValuationID[1]}', 
  'method': 'Search', 
  'data': {{ 'Object': 'Valuation', 'ObjectID' : '{//ValuationID[1]}' }} 
}}">.</div>

这可确保javascript不会将Valuation 12345的缓存结果与Valuation 23456(或任何其他Valuation)形式的缓存结果混合在一起。

在某些情况下,希望在有限的时间内缓存面板内容。对于“摘要”页面面板,通常合理的做法是将内容缓存10分钟(但不是整天)。 ObjectBind行为启用maxCacheDuration设置(以分钟为单位),如下所示:

<div id="attachmentList" class="span12" data-behavior="ObjectBind" data-objectbind-options="{{ 
  'class': 'qbo3.AttachmentObject', 
  'cacheKey': 'AttachmentList-Valuation-{//ValuationID[1]}', 
  'maxCacheDuration': 10,
  'method': 'Search', 
  'data': {{ 'Object': 'Valuation', 'ObjectID' : '{//ValuationID[1]}' }} 
}}">.</div>