随笔-200  评论-148  文章-15  trackbacks-0
Ajax改变了浏览器的默认规则,在使用Ajax应用时,后退往往会得不到我们还要的结果。那么如何来处理这种方式,使之更适合我们的习惯呢。
  Brad Neuberg的开源Really Simple History (RSH)框架是一个简单的解决这个问题的方案。其实现的方式如下:用隐藏的iFrame,Timer和隐藏的Form来检测历史浏览的变化,其中隐藏的Form用来保存页面的数据信息。
  当然其他还有如Backbase 和 Dojo还可以解决这种问题,但复杂度就高了些。
  下面就以先前的样例程序来看一下如何使用RSH框架,其实很容易的:

包含RSH框架的JS脚本: <script src="/oblog312/dhtmlHistory.js"></script>


初始化框架并定义后退时的回调函数:
<script language="JavaScript">
  function initialize() {
    // 初始化框架
    dhtmlHistory.initialize();
    // 加入回调函数
    dhtmlHistory.addListener(historyChange);
  }

  /** Our callback to receive history
      change events. */
  function historyChange(newLocation, historyData) {

    //更新数据
    DWRUtil.removeAllRows("goodsbody");
    var arrayUrl = newLocation.split(":");
    if (arrayUrl.length == 2) {
        document.getElementById("type").value = arrayUrl[0];
        document.rentalForm.select.checked = false;
        document.getElementById("totalRecords").innerHTML = historyData.length;
        DWRUtil.addRows("goodsbody", historyData, [ addCheckbox, getName, getPrice, getCount]);
      }
  }
</script>
在数据更新时保留之前的地址:  
function fillTable(goods) {
    dhtmlHistory.add(document.getElementById("type").value+":"+new Date().getTime(), goods);
   
  document.rentalForm.select.checked = false;
  document.getElementById("totalRecords").innerHTML = goods.length;
  DWRUtil.addRows("goodsbody", goods, [ addCheckbox, getName, getPrice, getCount]);
}

当然还在页面初始化加入上面的初始化函数:
<body onload="initialize();">

  OK,大功告成,简单吧^_^
posted on 2006-07-15 09:58 无声 阅读(945) 评论(0)  编辑  收藏 所属分类: 职场生活

只有注册用户登录后才能发表评论。


网站导航: