JavaScript - Ajax y clases

 
Vista:

Ajax y clases

Publicado por Aritz (14 intervenciones) el 31/05/2007 14:57:56
Estoy creando una clase con diferentes funciones:

function clase(var1, var2)
{
var var1, var2
this.var1 = var1;
this.var2 = var2;
}

clase.prototype.metodo = function()
{
var ajax = new Ajax.Request( url,
{
method: 'get',
parameters: param,
onComplete: function(originalRequest)
{
var1 = var2 + originalRequest.responseText;
}
);
}

Más o menos esto es lo que quiero conseguir. Inicializo la clase, y lla mo al método. En dicho método quiero que el valor de la clase varíe. Pero no consigo que me las cambie... El problema está en que la clase no es reconocida dentro de la funciónm AJAX si no la paso explícitamente y entonces el valor de la clase primaria no me cambia.

Alguien sabe como hacerlo?

Gracias
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

RE:Ajax y clases

Publicado por Gonzalo (107 intervenciones) el 01/06/2007 10:08:28
Parte 1:

function clase(var1, var2) {
this.var1 = var1;
this.var2 = var2;
}

La línea de "var var1, var2" sobra completamente. Tampoco estaría mal, para que el código sea más claro, ponerlo así:

function clase(param1, param2) {
this.var1 = param1;
this.var2 = param2;
}

Eso si quieres que var1 y var2 sean públicas. Si quisieras que fueran privadas, harías lo contrario:
function clase(param1, param2) {
var var1 = param1;
var var2 = param2;
}


Parte 2:
Probablemente deberías hacer:
this.var1 = this.var2 + originalRequest.responseText;
(Pero mira más abajo una mejora a esto)

Pero más que eso, me temo que tu clase no tenga demasiada utilidad así tal cual. O quizá sería mejor decir que no está demasiado bien encapsulada...

Fíjate que cuando haces:
...
clase.prototype.metodo = function() {
var ajax = new Ajax.Request( url, {
method: 'get',
parameters: param,
...
Hay ahí un montón de variables que no se sabe muy bien de donde salen. No se las estás pasando a la función y tampoco son parte de la clase. De modo que url y param son variables globales, o al menos están en un contexto externo a la función. Por eso no está bien encapsulada.

Creo más bien que lo que deberías hacer es declarar esos como parámetros de metodo:
clase.prototype.metodo = function(url, param) {
...

Aunque sigo sin tener claro qué es exactamente lo que quieres hacer.


Bueno, como comentaba más arriba, hay alguna mejora que hay que hacer:
(voy a suponer que quieres que var1 y var2 sean privadas)

function clase(param1, param2) {
var var1 = param1;
var var2 = param2;
var _self = this;

this.metodo = function(url, param) {

var ajax = new Ajax.Request( url, {
method: 'get', parameters: param,
onComplete: function(originalRequest) {
_self.var1 = _self.var2 + originalRequest.responseText;
});

}

//probablemente te interese leer var1 y var 2 de algún modo.
this.getvar1 = function() { return _self.var1; }
this.getvar2 = function() { return _self.var2; }

}

Si lo haces todo público, la cosa puede cambiar un poco:

function clase(param1, param2) {
this.var1 = param1;
this.var2 = param2;
}

clase.prototype.metodo = function(url, param) {

var ajax = new Ajax.Request( url, {
method: 'get', parameters: param,
onComplete: function(originalRequest) {
this.var1 = this.var2 + originalRequest.responseText;
});

}
Un detalle es que si haces el método público (con clase.prototype.metodo = function...) entonces tendrás que hacer las variables públicas también, porque si no no puedes acceder.

Igual la explicación es un poco confusa. Si tienes cualquier duda, pregunta (pero explica también cuál es el problema que quieres resolver).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ajax y clases

Publicado por Aritz (14 intervenciones) el 07/06/2007 08:48:43
Lo he solucionado sin usar clases, he usado 3 funciones, que quería que fueran los métodos de la clase. Alfinal he buscado el camino más sencillo.

Gracias de todas formas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar