在回调中访问父对象和调用对象?

时间:2011-06-10 17:47:52

标签: javascript object this coffeescript

我有一个库提供的函数,在一些处理后运行回调。

在回调中,我想访问其方法启动该回调的父对象 - 见下文。

class MaskMaker
  addMaskedImage: (imagefile, texturefile, canvasid) ->
    $('<img src="'+imagefile+'">').load ->
      console.log('Id like to call another MaskMaker method with @width as a parameter')

显然=&gt;将允许我访问父对象,因为这个/ @, - &gt;将允许我访问触发回调的元素as this / @。但是最好的方法是什么,例如,所以我可以用图像宽度作为参数调用MaskMaker的直接方法?我需要一个=这个黑客还是有更好的东西?

谢谢!

3 个答案:

答案 0 :(得分:3)

  

但是最好的方法是什么,例如,所以我可以用图像宽度作为参数调用MaskMaker的直接方法?

你不能同时选择(显然),所以必须选择=> + event.target

$('<img src="'+imagefile+'">').load (ev) => @method ev.target.width

或好ol'

that = this
$('<img src="'+imagefile+'">').load -> that.method @width

另请参阅:https://github.com/jashkenas/coffee-script/issues/1230

答案 1 :(得分:2)

如果我完全理解你的代码结构,你可以添加一个变量来保存对MaskMaker实例的引用。由于范围的原因,您将能够看到链中的任何内容。

class MaskMaker
  var self = this;
  addMaskedImage: (imagefile, texturefile, canvasid) ->
    $('<img src="'+imagefile+'">').load ->
      console.log('Id like to call another MaskMaker method with @width as a parameter')
      //self references MaskMaker now, so you can call self.addMaskedImage for example

答案 2 :(得分:0)

在MaskMaker范围内定义并绑定您的回调:

 class MaskMaker
     afterAdd => console.log('Id like to call another MaskMaker method with @width as a parameter')
     addMaskedImage: (imagefile, texturefile, canvasid) ->
         $('<img src="'+imagefile+'">').load -> afterAdd()

请注意,我使用胖箭头语法=>将afterAdd中存储的函数绑定到MaskMaker。