2

我有一个使用 requirejs 的成熟 javascript 应用程序,因此我不能依赖全局变量。我有 d3js 在我的节点网络的概念证明中运行,但是我对 Tick 事件侦听器有一个问题,因为我需要将对象引用传递给它,以便 Tick 事件处理程序可以使用发送者对象上的属性。

我目前有:

MyClass.prototype.SetupD3Force = function()
{    
      this.Force = d3.layout.force()
         .size([200, 200])
         .nodes([])
         .charge(-120)
         .on("tick", this.Tick);

// snip some code here
}

MyClass.prototype.Tick = function()
{
     // Need to get hold of the sender's object properties
}

我希望能够做到:

MyClass.prototype.SetupD3Force = function()
{    
      var width = 200;
      var height = 200;

      this.Force = d3.layout.force()
         .size([width, height])
         .nodes([])
         .charge(-120)
         .linkDistance(function(d) { 
             return d.value;
         })
         .on("tick", this.Tick, this); // Add a reference to the sender

// snip some code here
}

MyClass.prototype.Tick = function(sender)
{
     // Now I can get hold of my properties
    sender.MyProperties...
}

我错过了什么吗?如何将参数传递给 Tick 事件?

谢谢您的帮助!

4

1 回答 1

3

如果tick函数内部的“this”上下文还不是发送者,可以使用.bind函数将外部上下文绑定到Tick的“this”上下文:

.on("tick", this.Tick.bind(this) )

然后稍后使用它们:

MyClass.prototype.Tick = function()
{
     console.log(this.width);
}

您还可以传递希望作为功能参数包含的更多参数。请参阅上面的链接以及来自 MSDN的链接。

于 2013-04-30T14:29:37.377 回答