ecside的ajax的errorHandler的问题以及shadowRow使用的问题。

bjwulin 2007-03-24
fins,辛苦了,问题一个一个来:
1、我没有发现ecside的ajax有errorHandler的能力。我在项目中使用时,在会话过期的情况下,我做ajax的操作,会让“正在提交...”一直显示,错误无法显示给客户。因为,我正常的请求有会话拦截,因此,没有会话会提示登录。

2:那个“正在提交...”能否改成一个浮动层,浮动层作为一个窗口,显示正在提交?

3:shadowRow我看新的例子是可以至打开一个,但是我的项目却没有这个特性,后来看了下,发现那些改变高度的代码都被注释了,这样一样会带来“一页只有一行的情况下,shadowrow的行高度太小的问题”。我的项目中还没有只打开一个shadowrow,以及返回该页时,刷新打开的子行功能。

4:子行有3个回调方法,每个页面的写法差不多都一样,我想抽出来,以后好维护。下面是我抽取的代码,不能运行,提示222行的问题:

var ECTableUtil = {};
ECTableUtil.firstShowShadowRow = function (formid, crow, shadowRow, eventSrc, frameId, url) {
	var fillShadowRow = function (originalRequest, crow, shadowRow, formid, frameId) {
		var text = originalRequest.responseText;
		if (ECTableUtil.trimString(text) != "") {
			shadowRow.cells[0].innerHTML = text;
		} else {
			shadowRow.cells[0].innerHTML = "\u65e0\u6cd5\u53d6\u5f97\u76f8\u5173\u4fe1\u606f(" + crow.getAttribute("recordKey") + ").";
		}
		var shadowRowHeight = ECTableUtil.parseIntOrZero(shadowRow.cells[0].scrollHeight);
		shadowRow.setAttribute("shadowRowHeight", shadowRowHeight);
		shadowRow.cells[0].style.height = shadowRowHeight + "px";
		ECTableUtil.changeListHeight("+" + shadowRowHeight, formid);
		FrameUtil.maximizeParentIframe(frameId);
	};
	if (shadowRow && eventSrc) {
		eventSrc.innerHTML = "<img src=\"../images/table/arrowup.gif\"/>";
	}
	shadowRow.cells[0].innerHTML = "\u6b63\u5728\u8f7d\u5165\u4fe1\u606f\uff0c\u8bf7\u7b49\u5f85";
	var recordKey = crow.getAttribute("recordKey");
	var resHandler = ECTableUtil.bindFunction(ECTableUtil.fillShadowRow, "", crow, shadowRow, formid, frameId);
	var getShadowMessage = ECTableUtil.ajaxRequest(url+recordKey, resHandler);
};
ECTableUtil.hideShadowRow = function (formid, crow, shadowRow, eventSrc, frameId) {
	if (shadowRow && eventSrc) {
		eventSrc.innerHTML = "<img src=\"../images/table/arrowdown.gif\"/>";
	}
	var shadowRowHeight = ECTableUtil.parseIntOrZero(shadowRow.getAttribute("shadowRowHeight"));
	ECTableUtil.changeListHeight("-" + shadowRowHeight, formid);
	FrameUtil.maximizeParentIframe(frameId);
};


然后我在jsp页面中调用是:
function init()
	{
		var ecside=new ECSide("<ww:property value="%{#tableId}"/>"); 
		var showFunc=ECSideUtil.bindFunction(ECTableUtil.firstShowShadowRow,'','','','',"frame1","<ww:url value='/safetyadmin/testPlan!showJuniorWorkflowState.action'/>?workflowId=");
		ecside.firstShowShadowRowCallBack=showFunc;
		ecside.showShadowRowCallBack=showFunc;
		ecside.hideShadowRowCallBack=ECTableUtil.hideShadowRow;
		
		ecside.init();		
	}	


呵呵,辛苦fins,感谢下。
fins 2007-03-26
前两个问题 我已经开始计划解决 但需要一段时间 现在忙疯了

第3个 问题 你把opoa的例子里相关代码改成下面的样子 然后自己再体会一下:

//======================  shadowRow 相关 ======================== //
// 演示了如何利用ajax从远程取得信息填入 shadowRow 。这个信息可以是任意的合法的html代码。
function fillMemo(originalRequest,crow,shadowRow,formid){
	var text=originalRequest.responseText;
	if (ECSideUtil.trimString(text)!=''){
		shadowRow.cells[0].innerHTML=text;
	}else{
		shadowRow.cells[0].innerHTML="无法取得相关信息("+crow.getAttribute("recordKey")+").";
	}
	
	//你也可以改变列表的高度 changeListHeight参数1有5种: 整数  "+整数" "-整数" "auto" "reset" )
	var shadowRowHeight=ECSideUtil.parseIntOrZero(shadowRow.cells[0].scrollHeight);
	shadowRow.setAttribute("shadowRowHeight",shadowRowHeight);
	shadowRow.cells[0].style.height=shadowRowHeight+"px";
	

	var shadowRowHeight=ECSideUtil.parseIntOrZero(shadowRow.getAttribute("shadowRowHeight"));
	ECSideUtil.changeListHeight("+"+shadowRowHeight ,formid);
}

function testFirstShowShadowRowCallBack(formid,crow,shadowRow,eventSrc){
	if (shadowRow && eventSrc){
		eventSrc.innerHTML="-";
	}
	shadowRow.cells[0].innerHTML="正在载入信息,请等待";
	var recordKey=crow.getAttribute("recordKey");
	var myCallBack=ECSideUtil.bindFunction(fillMemo,'',crow,shadowRow,formid);
	getShadowMessage=ECSideUtil.ajaxRequest(APP_PATH+"/ajaxtemplate/getMemo.jsp?easyDataAccess=myEasyDA.getUserMemo&USERID="+recordKey,myCallBack);


}

function testShowShadowRowCallBack(formid,crow,shadowRow,eventSrc){
	// 如果你希望每次展开 shadowRow 时 都去更新,那么可以调用 FirstShowShadowRowCallBack.
	testFirstShowShadowRowCallBack(formid,crow,shadowRow,eventSrc);
    //否则 : 
	/*
	if (shadowRow && eventSrc){
		eventSrc.innerHTML="-";
	}
	*/
}

function testHideShadowRowCallBack(formid,crow,shadowRow,eventSrc){
	if (shadowRow && eventSrc){
		eventSrc.innerHTML="+";
	}
	var shadowRowHeight=ECSideUtil.parseIntOrZero(shadowRow.getAttribute("shadowRowHeight"));
	ECSideUtil.changeListHeight("-"+shadowRowHeight ,formid);
}




第4个问题:
ECTableUtil.firstShowShadowRow内定义的
var fillShadowRow = function ...

不能通过21行的  ECTableUtil.fillShadowRow 被访问到啊
直接 使用 fillShadowRow 就可以被内部访问了
Global site tag (gtag.js) - Google Analytics