0

我在咖啡脚本类中有以下d3(立体主义)代码:

d3.select("view").selectAll(".horizon")
    .data( @metrics )
  .enter()
    .insert("div", ".bottom")
    .attr("class", "horizon")
  .call( @ctx.horizon() )

一切都很好。但是,我想将以下数据结构传递到我的类中以实例化“视图”:

metricGroup =
  cpu:
    extent: [0,100]
  temperature:
    extent: [0,80]
  power:
    scale: d3.scale.ordinal( [0,1,2] ).range( [-2,1,-1] )
    extent: [-2,1]

如您所见,我希望将某些scaleextents 与每个指标相关联。horizon每个指标(将)定义对需要在上述d3代码中链接的每个对象的特定调用,以便:

.call( 
  @ctx.horizon()
    .scale(@metricGroup.power.scale)
    .extent(@metricGroup.power.extent) 
)

所以对于“功率”指标,它将是

.call(
  @ctx.horizon()
    .scale(d3.scale.ordinal( [0,1,2] ).range( [-2,1,-1] ))
    .extent( [-2,1] )
)

我怎样才能保持 select/enter/call 方法链的优雅,同时提供我想要的自定义?

4

1 回答 1

0

我在这里有点受限制,因为我对立体主义只是有点熟悉,而且我受不了 Coffeescript :)。但看起来您可能想要为您的地平线属性定义函数,根据此处的“语言数组”示例(向上滚动一段)。我不知道@metrics您的代码中有什么,但是如果您使用了一个键名数组,例如,["cpu", "temperature", ...]您可以在函数中进行查找,例如(抱歉,切换到 js):

.call(
    ctx.horizon()
       .scale(function(d) { return metricGroup[d].scale || defaultScale; })
       // etc
)
于 2013-05-12T05:01:10.597 回答