3

クラス内でこの JavaScript を CoffeeScript に変換する方法に単純な誤りがあるのではないかと心配しています。

この世界地図の元の例では、次の関数があります。

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)) ) 

ただし、これは値を返すのではなく、スケール関数を返すため、次のようになります。

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

私は非常に単純な間違ったことをしていると確信していますが、それを理解することはできません。手伝ってくれますか?

4

2 に答える 2

3

Javascript コードでは、quantize に次の値が含まれています。

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

しかし、CoffeeScript バージョンでは、quantize は関数です。

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" ))

そのため、量子化は関数のままです。

@quantizequantize はプロパティではなく変数のように見えるため、Javascript で this.quantize に変換されるの @ を削除する必要があります。プロパティと変数の違い

于 2013-07-18T15:00:11.557 に答える