可能的dijit.Tree Cookie问题(SaveStateCookie)

时间:2009-07-22 20:23:23

标签: dojo

因此,我们的应用程序设置为与树的标准左框架,右框架具有主要内容(从单击树加载)。

我们的网络应用程序在Firefox的主框架中不一致地显示空白页面。通过不一致,我的意思是每天为少数人,很少为其他人,从不为大多数人。一旦我们得到这个,通过我们的树转到任何其他页面会得到一个空白页面。我们发现删除“aTreeSaveStateCookie”会恢复正常操作。 “aTree”是我们Div的名字。我在dijit / Tree.js中找到了“SaveStateCookie”字符串。

这也发生在IE中,除了我会得到一个浏览器错误页面,我现在不记得了。然后我会删除我能为我们的应用程序找到的唯一cookie(不确定如何在IE中执行Firefox步骤)

关于为什么会发生这种情况的任何想法?

由于

道场1.3至http://ajax.googleapis.com/ajax/libs/dojo/1.3/dojo/dojo.xd.js
Firefox 3.1x
IE 8
Windows XP
就我而言,我不记得曾经改变私人数据的浏览器设置。

2 个答案:

答案 0 :(得分:0)

请检查响应代码是否为413(413 =请求实体太大),通常当用于存储树扩展状态(aTreeSaveStateCookie)的cookie超过(s)时,会发生这种情况请求服务器大小

您可以尝试增加最大请求大小(按照特定Web应用程序服务器的说明)或至少在遇到413错误代码时显示有意义的错误消息,例如“请清除浏览器缓存”

答案 1 :(得分:0)

如果persist属性设置为真值,dijit.Tree将保持其状态以记住哪些节点已展开,并在页面重新加载后展开它们。如果您需要在存在非常大的数据结构时保持树状态,我建议覆盖Tree以使用localStorage而不是dojo.cookie

这是Dojo v.1.9,但可以对非AMD版本1.3进行类似的更改

_saveExpandedNodes: function(){
   if(this.persist && this.cookieName){
      var ary = [];
      for(var id in this._openedNodes){
         ary.push(id);
      }
      // Was:
      // cookie(this.cookieName, ary.join(","), {expires: 365});
      localStorage.setItem(this.cookieName, ary.join(","));
   }
},

_initState: function(){
   // summary:
   //    Load in which nodes should be opened automatically
   this._openedNodes = {};
   if(this.persist && this.cookieName){
      // Was:
      // var oreo = cookie(this.cookieName);
      var oreo = localStorage.getItem(this.cookieName);
      if(oreo){
         array.forEach(oreo.split(','), function(item){
            this._openedNodes[item] = true;
         }, this);
      }
   }
},