0

次のように、「ゲートウェイ」オブジェクトの配列を選択して追加する d3 コードがあります。

var gwList = chart.selectAll('.gw')
             .data(gateways);

gwList
  .enter()
  .append('svg:g')
  .attr('class', 'gw')  // the CSS class to use. Change this!
  .append("svg:path")   // append a path only for each new object, with class 'line'
  .attr("class", "line")
  .attr("clip-path", "url(#clip)")
  .datum(function(d, i) {
      return {object: d, timeValues:null};
  });

.datum() 呼び出しに注意してください。エントリ選択要素で、ゲートウェイ オブジェクトを 2 つのプロパティを持つオブジェクトに置き換える必要があります。

それから私は:

gwList
    .selectAll('path.line')
    .data(function(d) {
        // stuff
    });

私が理解できないのは、エントリノードの「datum()」呼び出しがあるにもかかわらず、下位の .data() 関数の「d」の値は常に元のゲートウェイオブジェクトであり、変更された内部オブジェクトではありません。 . 「this」の値は、パス要素の選択配列であり、正しいデータ値を持っています。どうすればそれを取得できますか? (d) にないのはなぜですか?

d[0].__data__ // gives the right answer
d.data() is an error about object [object Array] has no method 'data'
d[0].data() Object #<SVGPathElement> has no method 'data'

selection.datum の例を見つけようとしましたが、これを説明する例はまだ見たことがありません。誰かがここで何が起こっているのか手がかりを教えてもらえますか?

4

1 に答える 1

0

理解した。selectAll('path.line')の後のセクションで'data()'を呼び出す代わりに、'each'または'call'を呼び出す必要がありました。これにより、副選択のデータが関数に正しく渡されました。

于 2013-03-14T01:26:16.787 に答える