一个很小的技巧,留下一笔,供日后查看。

业务场景:

一个页面A,打开一个新窗口页面B,执行业务操作,B执行完后,回调A页面方法,并关闭自身。

最原始方法:

最直接的方法莫过于在B页面直接调用A页面的某一个方法,示例代码如下:

A页面打开B页面的方法如下:

 function showIndustry() {
var title = "行业选择";
layer.open({
title: title,
type: ,
area: ['768px', '550px'],
fixed: false, //不固定
maxmin: true,
content: ctxPath + 'sgjXzzfCommon/industryView'
});
}

B页面保存方法如下:

    function saveInfo() {
var a = $("#selectId").val();
var b = $("#selectName").val();
parent.initIndustrySelect(a, b);
closeLayer();
}

这样写完全满足需要,但是如果B页面是一个公共的页面,供很多页面调用的话,那么这种写法就存在如下2个问题:

1.写页面的人很多,不可能把回调函数都命名为相同的方法名称,让B页面回调。这样会增加页面间调用出错的可能性。

2.B页面根据不同的父页面,编写各种if else语句或者switch语句,用来判断应该回调那些页面的函数,增加了代码量和出错的概率。

为此,如果能有一种方法让B根据调用者的意图来回调,又不增加额外的代码,那么简直就是极好的。于是,有了如下的办法:

新方法:

A页面打开B页面时,增加一个参数callbackFun,用于告诉B页面回调函数名称叫什么,然后B页面在完成自身操作后,直接回调这个函数。

 function showIndustry() {
var title = "行业选择";
layer.open({
title: title,
type: ,
area: ['768px', '550px'],
fixed: false, //不固定
maxmin: true,
content: ctxPath + 'sgjXzzfCommon/industryView?callbackFun=initIndustrySelect'
});
}
function initIndustrySelect(obj) {
if (obj!= null) {
currentForm.find("input[name=industry]").first().val(obj.id);
currentForm.find("input[name=industryName]").first().val(obj.name);
}
}

B页面的回调方法如下:

function saveInfo() {
if (currentForm.valid() == false) {
return;
}
$("#btnSubmit").prop("disabled", true);
currentForm.ajaxSubmit({
type: 'post',
url: ctxPath + "sgjXzzfCommon/add",
success: function (data) {
$("#btnSubmit").prop("disabled", false);
if (data.success == true) {
callback(data.data);
closeLayer("保存成功");
}
else {
layer.alert("提交失败:" + data.error);
}
},
error: function (data) {
$("#btnSubmit").prop("disabled", false);
layer.alert("提交失败:" + data.statusText);
}
});
}
 function callback(obj) {
var fun = /*[[${callbackFun}]]*/;
if (fun!=null && fun.length > ) {
var callbackFun = parent[fun];
if (typeof callbackFun != "undefined") {
callbackFun(obj);
} else {
callbackFun = parent.frames[][fun];
callbackFun(obj);
}
}
}

如此,A、B页面直接通过callbackFun参数实现回调,解决了页面回调耦合性强的问题。

巧用JavaScript语言特性解耦页面间调用的更多相关文章

  1. javascript中父、子页面间调用

    本文主要转自:http://www.360doc.com/content/11/0525/17/6161903_119333834.shtml                    http://zh ...

  2. 前端学习 第三弹: JavaScript语言的特性与发展

    前端学习 第三弹: JavaScript语言的特性与发展 javascript的缺点 1.没有命名空间,没有多文件的规范,同名函数相互覆盖 导致js的模块化很差 2.标准库很小 3.null和unde ...

  3. 理解Javascript的动态语言特性

    原文:理解Javascript的动态语言特性 理解Javascript的动态语言特性 Javascript是一种解释性语言,而并非编译性,它不能编译成二进制文件. 理解动态执行与闭包的概念 动态执行: ...

  4. JS数组 编程练习 使用Javascript语言,把以下数组 在页面显示如下图所示的图案

    编程练习 使用Javascript语言,把以下数组 var  arr = ['*','##',"***","&&","****&quo ...

  5. JAVASCRIPT实现的WEB页面跳转以及页面间传值方法

    在WEB页面中,我们实现页面跳转的方法通常是用LINK,BUTTON LINK ,IMG LINK等等,由用户点击某处,然后直接由浏览器帮我们跳转. 但有时候,需要当某事件触发时,我们先做一些操作,然 ...

  6. JavaScript之iframe页面间通信

    [1] iframe父子页面间通信 1.相互调用对方的方法 |> 子级页面调用父级页面 window.parent.父级页面方法(args) |> 父级页面调用子级页面 document. ...

  7. Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

    Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...

  8. javascript语言精粹摘要

    JavaScript中五种基本类型:string,number,boolean,null,undefined.还有一个对象类型object. javascript只有一个数字类型.它在内部被表示为64 ...

  9. Pro ASP.NET MVC –第四章 语言特性精华

    C#语言有很多特性,并不是所有的程序员都了解本书我们将会使用的C#语言特性.因此,在本章,我们将了解一下作为一个好的MVC程序员需要了解C#语言的特性. 每个特性我们都只是简要介绍.如果你想深入了解L ...

随机推荐

  1. lftp连接异常情况分析过程

    [问题现象]:通过rpm安装好lftp后,执行lftp huangmr:huangmr@192.168.107.132无法连接(lftp huangmr@192.168.107.132:~> l ...

  2. python、第七篇:ORM框架SQLAlchemy

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  3. deep_learning_Function_tensorflow_unpack()

    tf.unpack(A, axis)是一个解包函数.A是一个需要被解包的对象,axis是一个解包方式的定义,默认是零,如果是零,返回的结果就是按行解包.如果是1,就是按列解包. 例如: from te ...

  4. 关于STM32中printf函数的重定向问题

    printf函数一般是打印到终端的,stm32芯片调试中经常需要用到串口来打印调试信息,那能不能用串口实现类似windows的Console中的printf呢? 答案是肯定的,那就是printf函数的 ...

  5. C语言之在头文件中定义全局变量

    通常情况下,都是在C文件中定义全局变量,在头文件中声明,但是,如果我们定义的全局变量需要被很多的C文件使用的话,那么将全局变量定义在头文件里面会方便很多,那到底是如何实现的? os_var.c文件内容 ...

  6. ZenCart通过Contact Us接收垃圾邮件的过滤方案

    最近收到一些通过Contact Us进行垃圾外链群发的邮件,虽然可以通过在Contact Us增加验证码来解决,但不利于客户体验.所以我们可以通过简单的关键词过滤来实现,一般垃圾外链都含有“[url= ...

  7. 【hdu 6067】Big Integer

    题意 给你一个 \((k-1)\times (n+1)\) 的 \(01\) 矩阵 \(g\),求满足下列条件的 \(k(k\le 10)\) 进制整数的数量: 1. 不超过 \(n\) 位且数的最高 ...

  8. 原根&离散对数简单总结

    原根&离散对数 1.原根 1.定义: 定义\(Ord_m(a)\)为使得\(a^d\equiv1\;(mod\;m)\)成立的最小的d(其中a和m互质) 由欧拉定理可知: \(Ord\le\P ...

  9. Python语法之垃圾回收机制

    目录 一 引入 二.什么是垃圾回收机制? 三.为什么要用垃圾回收机制? 四.垃圾回收机制原理分析 4.1.什么是引用计数? 4.2.引用计数扩展阅读 一 引入 解释器在执行到定义变量的语法时,会申请内 ...

  10. 【JZOJ5180】【NOI2017模拟6.29】呵呵

    题目 分析 套上prufer序列, 对于一颗n个节点度数分别为\(d_1.d_2...d_n\)方案数为\(\dfrac{(n-2)!}{(d_1-1)!(d_2-1)!......(d_n-1)!} ...