使用js callback机制实现调用页面局部刷新

简介:

    需求描述:审批表单页面由我的待办工作中打开,办理完毕后希望关闭该页面并且实现我待办表格的实时刷新;同时该需求也同样适用于从某些工作流管理模块中需要发起审批的情况,比如招聘需求模块中发起录用流程;我的绩效管理中审批绩效等。

    我们先来看看之前的实现,该逻辑实现的功能是,从我待办列表中发起审批,审批结束后直接在当前页面,也就是审批页面跳转至一个新的oa主页面,并且打开我的工作-我待办的页签,实现方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$( "#but_back" ).bind( "click" function () {
         window.top.opener= null ;
         var  url = window.location.href;
         var  isoa=url.indexOf( 'phicomm.com' );
         //var isoatest=url.indexOf('oatest.phicomm.com');
         var  curWwwPath=window.document.location.href; 
         var  pathName=window.document.location.pathname; 
         var  pos=curWwwPath.indexOf(pathName); 
         var  localhostPaht=curWwwPath.substring(0,pos); 
         var  projectName=pathName.substring(0,pathName.substr(1).indexOf( '/' )+1);
         if (isoa>0){
             window.top.open(localhostPaht+ '/main/index.action?tableName=mywork' , '_self' );
         } else {
             window.top.open(localhostPaht+projectName+ '/main/index.action?tableName=mywork' , '_self' );
         }
     });

  桌面js的处理逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  $(document).ready( function ($){
      // 初始化图标
      initModules(initMenus());
      
      refixAppPos();
      // 注册事件
      regClick();
      
      sortable();
     initIcoRemove();
      
      initAppManager();
      //解析当前URL判断是否需要跳转制定Table
      gotoTable();
  });
  
  //跳转制定Table
  function  gotoTable(){
      var  tableName = request( "tableName" );
      if ( "" !=tableName&& null !=tableName&& 'undefined' !=tableName){
          openUrl($( "#desktop_content_icon_" +tableName));
      }
  }

  以上方法虽然实现了办理结束后跳至我的待办的功能,但有以下缺陷:

  1. 跳转是在新页面中,并非在调用页面,这样就形成了调用和跳转页面两个相同的桌面;

  2. 新的页面并非与原调用页面完全一致,调用页面如打开多个页签,新打开的页面相当于将除我的待办外的其他页签关闭,并不符合用户的需求;

  3. 用户体验不友好

  我们使用js callback的实现如下,当前页面的调用页面非空且未关闭时,我们就直接调用页面中的js方法实现其局部的刷新。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/** 刷新父窗口关闭弹出窗口 */
     function  refreshAndClose(){
         var  jscallback = $.trim($( "#jscallback" ).val());
         var  type = $.trim($( "#type" ).val());
         if  (window.opener  && !window.opener.closed && jscallback!= null  && jscallback!= "" ) {
             if (!type){
                 //本页面的调用页面执行其嵌入或调用的js方法
                 eval( "window.opener." +jscallback+ "();" );
             }
             window.close(); //当前页面关闭
         else  {
             window.top.opener= null ;
             var  url = window.location.href;
             var  isoa=url.indexOf( 'phicomm.com' );
             
             var  curWwwPath=window.document.location.href; 
             var  pathName=window.document.location.pathname; 
             var  pos=curWwwPath.indexOf(pathName); 
             var  localhostPaht=curWwwPath.substring(0,pos); 
             var  projectName=pathName.substring(0,pathName.substr(1).indexOf( '/' )+1);
             if (isoa>0){
                 
                 window.top.open(localhostPaht+ '/main/index.action?tableName=mywork' , '_self' );
             } else {
                 window.top.open(localhostPaht+projectName+ '/main/index.action?tableName=mywork' , '_self' );
             }
         }
     }

  调用页面js:grid即为需要局部刷新的表格。

1
2
3
4
5
6
7
function  openUrl(url){
     url=url+ "&jscallback=callsus"
          window.open(url, '_blank' );   
}
function  callsus(){
     $( '#performanceDataGrid' ).reload();
}

  通过js callback实现了调用页面的局部刷新,并对其他应用的类似功能具有一定的指导和参考意义。


     本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/1623739,如需转载请自行联系原作者



相关文章
|
14天前
|
JavaScript 前端开发 容器
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
16 0
|
1月前
|
JavaScript 前端开发 Java
springboot从控制器请求至页面时js失效的解决方法
springboot从控制器请求至页面时js失效的解决方法
15 0
springboot从控制器请求至页面时js失效的解决方法
|
1月前
|
设计模式 JavaScript 前端开发
深入理解 JavaScript 中的绑定机制(下)
深入理解 JavaScript 中的绑定机制(下)
|
1月前
|
JavaScript 前端开发
深入理解 JavaScript 中的绑定机制(上)
深入理解 JavaScript 中的绑定机制(上)
|
1月前
|
Web App开发 前端开发 JavaScript
编程笔记 html5&css&js 004 我的第一个页面
编程笔记 html5&css&js 004 我的第一个页面
|
1月前
|
JavaScript 前端开发
springboot+layui从控制器请求至页面时js失效的解决方法
springboot+layui从控制器请求至页面时js失效的解决方法
15 0
|
22天前
|
JavaScript 前端开发
JS:如何创建新元素并添加到页面中
JS:如何创建新元素并添加到页面中
23 1
|
28天前
|
开发框架 JavaScript 前端开发
描述JavaScript事件循环机制,并举例说明在游戏循环更新中的应用。
JavaScript的事件循环机制是单线程处理异步操作的关键,由调用栈、事件队列和Web APIs构成。调用栈执行函数,遇到异步操作时交给Web APIs,完成后回调函数进入事件队列。当调用栈空时,事件循环取队列中的任务执行。在游戏开发中,事件循环驱动游戏循环更新,包括输入处理、逻辑更新和渲染。示例代码展示了如何模拟游戏循环,实际开发中常用框架提供更高级别的抽象。
11 1
|
29天前
|
JavaScript 前端开发 算法
深入探讨前端框架Vue.js中的虚拟DOM机制
本文将深入探讨前端框架Vue.js中的虚拟DOM机制,分析其原理、优势以及在实际开发中的应用场景,帮助读者更好地理解Vue.js框架的核心特性。
|
1月前
|
前端开发 JavaScript
js开发:请解释Promise是什么,以及它如何解决回调地狱(callback hell)问题。
Promise是JavaScript解决异步操作回调地狱的工具,代表未来可能完成的值。传统的回调函数嵌套导致代码难以维护,而Promise通过链式调用`.then()`和`.catch()`使异步流程清晰扁平。每个异步操作封装为Promise,成功时`.then()`传递结果,出错时`.catch()`捕获异常。ES6的`async/await`进一步简化Promise的使用,使异步代码更接近同步风格。
15 1