JavaScriptで別のオブジェクトに属する関数を呼び出す方法(script.aculo.usを使用)

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

質問

作成したオブジェクトに属する関数内に、「script.aculo.us dragdropモジュールから」「Draggable」オブジェクトの新しいインスタンスを作成しています。そのオブジェクトを「Person」オブジェクトと呼びましょう。簡単です。ただし、Draggableオブジェクト内の「onEnd」関数内から、前述の「Person」オブジェクトに属する別の関数getCell()を呼び出す必要があります。循環器のようなものは知っていますが、これを行う方法を知っていたらいいのにと思います。私が試したことは何もありません。できますか?以下は簡潔にするために大幅に編集された例ですが、それが私の意図を伝えることを願っています。ここでの洞察に感謝します。ありがとう。

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()];
  }
});    
役に立ちましたか?

解決

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()];
  }
});

他のヒント

試用

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

または

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

    p = new Draggable(p, {     
     onEnd: function(d) {      
      var pos = getCell(d.element);
      .......
      .......
     }
     .......
     .......
    });
  },
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top