1. 程式人生 > >父頁面子頁面傳參及函式呼叫

父頁面子頁面傳參及函式呼叫


Interface= {};
Interface.ParentWin = {};
Interface.ChildWin = {};


/**
* 父頁面提供的標準介面函式名稱
*/
Interface.ParentWin.funName = {
getDataFun: "getDataFun", //子頁面呼叫,提供給子頁面的資料介面
updateDataFun: "updateDataFun", //子頁面呼叫,向父頁面提交資料介面
closeFun: "closeFun" //子頁面需要關閉時,呼叫父頁面的關閉視窗介面
}


/**
* 父頁面設定需要提供給子頁面的介面函式
* @param childWinId :要使用的子頁面對應介面的id,該id需要與子頁面中定義的id一致
* @param functionName : 需要註冊的回撥函式名稱,介面名稱只能是Interface.ParentWin.funName中定義的名稱
* @param callbackFun :子頁面資料向父頁面更新資料時的回撥函式,介面入參為js物件
*/
Interface.ParentWin.setFunForChild = function(childWinId, functionName, callbackFun) {
if (comm.isEmpty(childWinId)) {
alert("沒有為子頁面呼叫介面定義物件Id");
return;
}
//儲存父頁面提供給子頁面呼叫的介面總物件
if (comm.isEmpty(window.childCallbackObj)) {
window.childCallbackObj = {};
}
//與指定子頁面對應的回撥介面物件
var childCallbackObj = window.childCallbackObj;
if (comm.isEmpty(childCallbackObj[childWinId])) {
childCallbackObj[childWinId] = {};
}

var childObj = childCallbackObj[childWinId];
if (!comm.isEmpty(childObj[functionName])) {
alert("子頁面" + childWinId + " 所需呼叫介面已存在" + functionName);
return;
}
//檢查介面是否為註冊的介面
for (var pro in Interface.ParentWin.funName) {
if (Interface.ParentWin.funName[pro] == functionName) {
childObj[functionName] = callbackFun;
return;
}
}
alert("子頁面 " + childWinId + " 所需呼叫介面未註冊:" + functionName + "。請檢查介面定義宣告物件。");
}


/**
* 檢查指定的子頁面呼叫介面是否存在
*/
Interface.ChildWin.checkValid = function(childWinId, funName) {
var parentWin = window.parent;
var childCallbackObj = parentWin.childCallbackObj;
if (comm.isEmpty(childWinId)) {
alert("子頁面呼叫介面定義物件Id不能為空!");
return false;
}
if (comm.isEmpty(childCallbackObj)) {
alert("父頁面呼叫介面定義的物件不存在");
return false;
}
var childObj = childCallbackObj[childWinId];
if (comm.isEmpty(childObj)) {
alert("子頁面呼叫介面定義的物件不存在");
return false;
}
if (comm.isEmpty(childObj[funName])) {
alert("父頁面呼叫介面定義不存在:" + funName);
return false;
}
return true;
}


/**
* 子頁面呼叫父頁面的介面函式
* @childWinId :子頁面定義的自身頁面Id
* @funcName : 需要呼叫的回撥函式名稱
* @params : 需要傳遞的引數
* @return :如果函式有返回值則通過其進行返回
*/
Interface.ChildWin.callBack = function(childWinId, funcName, params) {
if (!Interface.ChildWin.checkValid(childWinId, funcName)) {
return;
}

var parentWin = window.parent;
var childObj = parentWin.childCallbackObj[childWinId];
return childObj[funcName].call(parentWin, params);