将d3.js JavaScript函数转换为CoffeeScript

害怕我在如何将这个JavaScript转换为类中的CoffeeScript时犯了一个简单的错误

在这original example of a world map我们有一个功能:

var quantize = d3.scale.quantize()
    .domain([0, .15])
    .range(d3.range(9).map(function(i) { return "q" + i + "-9"; }));

然后在渲染地图时调用它:

.attr("class", function(d) { return quantize(rateById.get(d.id)); })

我们留下类似class =“q8-9这就是我们想要的东西.

将其转换为CoffeeScript我有:

quantize: ->
  d3.scale.quantize()
    .domain([0, .15])
    .range(d3.range(9).map((i) -> "q" + i + "-9" ))

然后我称之为:

.attr("class", (d) => @quantize(rateById.get(d.id)) ) 

但是这不返回值,而是返回scale函数,让我这样:

class =“function scale(x){return range [Math.max(0,Math.min(i,Math.floor(kx *(x – x0))))];}”

我确定我做的事情非常简单,但无法解决.你能帮我吗?

解决方法:

代替

quantize: ->
  d3.scale.quantize()
    .domain([0, .15])
    .range(d3.range(9).map((i) -> "q" + i + "-9" ))

你要

quantize : 
  d3.scale.quantize()
    .domain([0, .15])
    .range(d3.range(9).map((i) -> "q" + i + "-9" ))

– &GT在定义函数时使用,但在这里你只是调用一个函数(它恰好返回一个函数),所以它类似于它的JavaScript对应物.

注意:根据您的情况判断: – >开始时和@quantize转换为this.quantize,看起来你将量化存储在一个很好的对象中,并且是上面的代码所假设的.如果您的代码实际上更像是您链接到量化只是变量的原始示例,那么您将需要quantize = d3 …和quantize(rateId.get(d.id))(不带@).

CoffeeScript site顶部的“Try CoffeeScript”链接可以让你编写CoffeeScript,它可以随时翻译成JavaScript,这是学习和理解翻译成什么的好方法.还有用于浏览器的插件可以执行此操作.

上一篇:javascript – 为所有函数添加一行代码


下一篇:javascript – 将数组与自身连接