0

私はprotovisにかなり慣れていません。http://mbostock.github.com/protovis/docs/panel.htmlの例を理解しようとしていましたが、left(function() this.index * 10)実際には理解できleft(function(){return this.index * 10;}) 、関数が呼び出されるとスコープが渡され、this今までは問題ありませんでした。しかしdata(function(array) array)、から配列を取得しませんthis。むしろそれに渡されます。これarrayはどこから渡されますか?連鎖の流れが理解できません。

4

1 に答える 1

0

これは、最初は少し混乱する Protovis の多くの部分の 1 つです。マークにデータを追加すると、次のようになります。

var mark = new pv.Panel()
    .data([1,2,3]);

マークは配列内の項目ごとに 1 回複製されdata、対応する項目がその関数の最初の引数として渡されます。次に例を示します。

new pv.Panel()
    .data([1,2,3])
    .title(function(d) { // <-- d is 1, 2, or 3
        return d;
    });

アタッチする子マークもこのデータ ポイントを受け取ります。これは、子マークがその関数markの入力引数として使用できます。次に例を示します。

new pv.Panel()
    .data([1,2,3])
  .add(pv.Label)
    .text(function(d) { // <-- d is 1, 2, or 3
        return d;
    });

ただし、子マークは独自の を定義することもできdata()、それに応じてそのマークが複製されます。子マークのデータは、完全に独立している場合があります。たとえば、次のようになります。

new pv.Panel()
    .data([1,2,3])
  .add(pv.Label)
    .data([3,4,5])
    .text(function(d) { // <-- d is 3, 4, or 5
        return d;
    });

しかし、多くの場合、リンク先の例のように、親はデータとして 2 次元または 3 次元の配列を持ち、子はdata()渡されたサブ配列に基づいています。

new pv.Panel()
    .data([[1,2,3], [3,4,5]])
  .add(pv.Label)
    .data(function(d) { // <-- d is [1,2,3] or [3,4,5]
        return d;
    })
    .text(function(d) { // <-- d is either 1, 2, or 3, 
                        // OR 3, 4, or 5
        return d;
    });
于 2011-11-04T06:00:44.387 に答える