Cómo llamar a una función que pertenece a otro objeto en JavaScript (usando script.aculo.us)

StackOverflow https://stackoverflow.com/questions/1225484

Pregunta

Estoy creando una nueva instancia del objeto 'Draggable' (del módulo script.aculo.us dragdrop) dentro de una función que pertenece a un objeto que creé. Llamemos a ese objeto el objeto 'Persona'. Suficientemente fácil. Sin embargo, desde dentro de la función 'onEnd' dentro del objeto Draggable, necesito llamar a otra función, getCell (), que también pertenece al objeto 'Persona' mencionado anteriormente. Un poco circulatorio, lo sé, pero me gustaría saber cómo hacerlo. Nada de lo que he probado funciona. Se puede hacer? A continuación se muestra un ejemplo muy editado por brevedad, pero espero que transmita mi intención. Estaría agradecido por cualquier idea aquí. Gracias.

var Person = Class.create({
  initialize: function(name) {
    this.name = name;
  },        
  move: function(p) {
    p = new Draggable(p, {     
     onEnd: function(d) {      
      var pos = getCell(d.element);
      .......
      .......
     }
     .......
     .......
    });
  },
  getCell: function(t) {
    var pos = t.positionedOffset();
    return [(pos.left / 64).floor(), (pos.top /64).floor()];
  }
});    
¿Fue útil?

Solución

pruebe Function.bind :

var Person = Class.create({
  initialize: function(name) {
    this.name = name;
  },        
  move: function(p) {
    p = new Draggable(p, {     
     onEnd: function(d) {      
      var pos = this.getCell(d.element);
      .......
      .......
     }.bind(this)
     .......
     .......
    });
  },
  getCell: function(t) {
    var pos = t.positionedOffset();
    return [(pos.left / 64).floor(), (pos.top /64).floor()];
  }
});

Otros consejos

prueba

move: function(p) {
    p = new Draggable(p, {     
     onEnd: function(d) {      
      var pos = p.getCell(d.element);
      .......
      .......
     }
     .......
     .......
    });
  },

o

move: function(p) {
    var getCell = function (el) {
        return p.getCell ( el );
    };

    p = new Draggable(p, {     
     onEnd: function(d) {      
      var pos = getCell(d.element);
      .......
      .......
     }
     .......
     .......
    });
  },
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top