论坛首页 Web前端技术论坛

prototypejs有沒有像php的interface, implement的功能呢??

浏览 2722 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-02-25  
prototypejs有沒有像php的interface, implement的功能呢??

為什麼我需要這些object的特性呢?
因為我想把整個項目用ajax實現
但問題是令到整個項目產生了很多相似但不完全相同的部份
例如

function formSubmit(e){
    var frmObj=Event.element(e);
    var pars=Form.serialize(frmObj.id);
    var url = frmObj.action;
    ajaxObj = new Ajax.Request(
		url, 
		{
			method: 'post', 
			postBody: pars, 
			asynchronous: true,
			onFailure:loginFailure, 
			onSuccess:getResponse
		}
    );
    Event.stop(e);
}


每一頁也充滿了大大小小的這一類的function但,當中的onSuccess, onFailure等的function及parameter會不同,如何可以減少這類重覆的代碼呢?
   发表时间:2008-02-25  
我们项目都是自己整个写js代码

如果是上面的那个问题,我会再把Prototype的Ajax.Request再封装一下以达到要求。

function formSubmit(e){  
    var frmObj=Event.element(e);  
    var pars=Form.serialize(frmObj.id);  
    var url = frmObj.action;  
    ajaxObj = new MyAjaxPost(url,pars,getResponse,loginFailure);
    );  
    Event.stop(e);  
} 

function MyAjaxPost(url, pars, succCallback, failCallback) {
	
	return new Ajax.Request(  
         url,   
         {  
             method: 'post',   
             postBody: pars,   
             asynchronous: true,  
             onFailure:failCallback,   
             onSuccess:succCallback  
         }  
     );
}


更极端的情况下,如果整个表单提交代码都像上面,再封装下,传form,success callback, failure callback似乎可以完成要求。
0 请登录后投票
   发表时间:2008-02-25  
你的方法正是我想實現的方法,但實際上不能完全實現
例如以下這兩個很相似的function,但parameter數量不一樣,function的起初又有一點點分別,
這樣便很難用一個object便可以實現


function formEnquiry(frmObj,validObj){
	var pars=Form.serialize(frmObj.id);
	
	var url = frmObj.action;
	setLog(url+'?'+pars,'ajax');
	ajaxObj = new Ajax.Request(
		url, 
		{
			method: 'post', 
			postBody: pars, 
			asynchronous: false,
			onCreate:toggleLoadingCorner,
			onFailure:formFailure, 
			onSuccess:function(result){
				formResponse(result,frmObj,validObj);
			},
			onComplete:function(){
				toggleLoadingCorner();
				_frmSubmitCnt=0;
				if (frmObj['actionID'].value=='del'){
					window.setTimeout(function() { 
						history.back();
					},8000);
				}
			}				
		}
	);
}

function formEnquiry(frmObj,validObj,FCKlist){
	if (frmObj['actionID'].value=='del'){
		var hiddenVal=frmObj.getInputs('hidden');
		hiddenVal.invoke('enable');	
		var pars=Form.serializeElements(frmObj.getInputs('hidden')) + "&submitBtn=" + frmObj['submitBtn'].value;  
	} else {
		var pars=Form.serialize(frmObj.id);
	}
	
	var url = frmObj.action;
	setLog(url+'?'+pars,'ajax');
	ajaxObj = new Ajax.Request(
		url, 
		{
			method: 'post', 
			postBody: pars, 
			asynchronous: false,
			onCreate:toggleLoadingCorner,
			onFailure:formFailure, 
			onSuccess:function(result){
				formResponse(result,frmObj,validObj,FCKlist);
			},
			onComplete:function(){
				toggleLoadingCorner();
				_frmSubmitCnt=0;
				if (frmObj['actionID'].value=='del'){
					window.setTimeout(function() { 
						history.back();
					},8000);
				}
			}				
		}
	);
}


0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics