JavaScript - Problema con Class.create()

 
Vista:

Problema con Class.create()

Publicado por Pablo Rebolledo (1 intervención) el 04/05/2007 18:14:36
mi proble es el siguiente antes yo tenia creada una clase muy bonita que me crea tablas
y ESTA

<!--

function TABLE(){
this.ini();
}

TABLE.prototype.ini=function(){
this.properties=new Array();
this.rows=new Array();
this.cols=new Array();
}

TABLE.prototype.getProperty=function(i,v){
var prd;
switch(i.toLowerCase()){
case 'id': prd="ID=\""+v+"\""; break;
case 'nm': prd="NAME=\""+v+"\""; break;
case 'cs': prd="CELLSPACING=\""+v+"\""; break;
case 'cp': prd="CELLPADDING=\""+v+"\""; break;
case 'bgc': prd="BGCOLOR=\""+v+"\""; break;
case 'bg': prd="BACKGROUND=\""+v+"\""; break;
case 'brdc': prd="BORDERCOLOR=\""+v+"\""; break;
case 'brd': prd="BORDER=\""+v+"\""; break;
case 'alg': prd="ALIGN=\""+v+"\""; break;
case 'cls': prd="CLASS=\""+v+"\""; break;
case 'stl': prd="STYLE=\""+v+"\""; break;
case 'w': prd="WIDTH=\""+v+"\""; break;
case 'h': prd="HEIGHT=\""+v+"\""; break;
case 'valg': prd="VALIGN=\""+v+"\""; break;
case 'cspan': prd="COLSPAN=\""+v+"\""; break;
case 'rspan': prd="ROWSPAN=\""+v+"\""; break;
case 'extra': prd=""+v+""; break;
case 'onc': prd="onClick=\""+v+"\""; break;
default: prd="";
}
return prd;
}

TABLE.prototype.addProperty=function(properties){
var prd;
if(properties!='undefined' && typeof(properties)=='object'){
for(var i in properties){
if(i!='cspan' && i!='rspan'){
prd=this.getProperty(i,properties[i]);
this.properties[this.properties.length]={'p':i,'prd':prd};
}
else{ continue; }
}
}
}

TABLE.prototype.addRow=function(properties){
var prd="";
if(properties!='undefined' && typeof(properties)=='object'){
for(var i in properties){
if(i!='cspan' && i!='rspan'){
prd+=" "+this.getProperty(i,properties[i]);
}
else{ continue; }
}
}
this.rows[this.rows.length]="<TR"+prd+">\n";
}

TABLE.prototype.addCol=function(dato,properties){
var prd="";
if(properties!='undefined' && typeof(properties)=='object'){
for(var i in properties){
if(i!='brd' && i!='brdc'){
prd+=" "+this.getProperty(i,properties[i]);
}
else{ continue; }
}
}
this.cols[this.cols.length]={'irow':(this.rows.length-1),'cols':'<TD'+prd+'>'+dato+'</TD>\n'};
}

TABLE.prototype.get=function(){
var _HTML_="<TABLE ";
for(var i in this.properties){
_HTML_+=this.properties[i]['prd']+" ";
} _HTML_+=">\n";

for(i in this.rows){
_HTML_+=this.rows[i];
for(var j in this.cols){
if(parseInt(i)==parseInt(this.cols[j]['irow'])){
_HTML_+=this.cols[j]['cols'];
}
}
_HTML_+="</TR>\n";
}
_HTML_+="</TABLE>\n";
//alert(_HTML_);
return _HTML_;
}

var t=new TABLE();
t.addProperty({cp:2,cs:0,brd:1}); //todos los parametros que quieras e includo estilos
t.addRow(); //tambien acepta parametros
t.addCol(1);
t.addCol(2);
t.addCol(3);
t.addCol(4);
alert(t.get()); //retorna una tabla de una fila con 4 columnas

//End-->

YA ESTE ES EL CUENTO, RESULTA QUE DECIDI IMPLEMENTAR LA LIBRERIA prototype.js que por lo demas es muy buena... PERO AL AGRAMAR MI CLASE BONITA ME ME MANDA UN CINFIN DE COSAS RARAS Y ES POR QUE LA POTOTYPE TIENE DEFINIDO NUEVOS METODOS PARA LOS OBJETOS Y LOS TIENE ALTERADOS.. LA CUESTIOS ES QUE DECIDI IMPLEMENTAR MI CLASE A LA MANERA DE PROTOTYPE.. PERO CUANDO TRATO DE LLAMAR UN METODO INTERNO DE LA PROPIA CLASE COMO DENTRO DE UN METODO DE LA MISMA CLASE ME MANDA UN ERROR, PERO SI CREO UNA FUNCION EXTERNA A LA CLASE CON EL MISMO NOMBRE DEL METODO INVOCADO, EN ESTE CASO "getProperty", ME ASUME LA FUNCION EXTERNA, Y DEJA DE MANDAR EL ERROR, ESE ES MI PROBLEMA, HABER SI A ALGUIEN QUE HA TRATADO DE MIGRAR SUS CLASES A ESTA FORMA, LE A PASADO ALGO SIMILAR.. PORFA NECESITO QUE ME AYUDEN....

addProperty:function(properties){
var prd="";
properties=$H(properties);
if(properties!='undefined' && typeof(properties)=='object'){
properties.each(function(par){
if(par.key!='cspan' && par.key!='rspan'){

//AQUI MANDA EL ERROR
prd=this.getProperty(par.key,par.value);

alert(prd);
}
});
}
}


ASI VA QUEDANDO LA CLASE USANDO PROTOTYPE

var TABLE=Class.create();
TABLE.prototype={
initialize:function(){
this.Properties=new Array();
this.rows=new Array();
this.cols=new Array();
},
addProperty:function(properties){
var prd="";
properties=$H(properties);
if(properties!='undefined' && typeof(properties)=='object'){
properties.each(function(par){
if(par.key!='cspan' && par.key!='rspan'){
prd=this.getProperty(par.key,par.value);
alert(prd);
}
});
}
},
getProperty:function(par){
var prd;
var key=par.key;
var value=par.value;
switch(key.toLowerCase()){
case 'id': prd="ID=\""+value+"\""; break;
case 'nm': prd="NAME=\""+value+"\""; break;
case 'cs': prd="CELLSPACING=\""+value+"\""; break;
case 'cp': prd="CELLPADDING=\""+value+"\""; break;
case 'bgc': prd="BGCOLOR=\""+value+"\""; break;
case 'bg': prd="BACKGROUND=\""+value+"\""; break;
case 'brdc': prd="BORDERCOLOR=\""+value+"\""; break;
case 'brd': prd="BORDER=\""+value+"\""; break;
case 'alg': prd="ALIGN=\""+value+"\""; break;
case 'cls': prd="CLASS=\""+value+"\""; break;
case 'stl': prd="STYLE=\""+value+"\""; break;
case 'w': prd="WIDTH=\""+value+"\""; break;
case 'h': prd="HEIGHT=\""+value+"\""; break;
case 'valg': prd="VALIGN=\""+value+"\""; break;
case 'cspan': prd="COLSPAN=\""+value+"\""; break;
case 'rspan': prd="ROWSPAN=\""+value+"\""; break;
case 'extra': prd=""+value+""; break;
case 'onc': prd="onClick=\""+value+"\""; break;
default: prd="";
}
return prd;
}
};
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder