添付されていないグループ要素を作成する関数の例を次に示します。
function createSomething(){
return function(){
var group = d3.select(document.createElementNS(d3.ns.prefix.svg, 'g'));
// Add stuff...
return group.node();
}
}
次のように呼び出すことができます。
node.append(createSomething());
説明
折りたたみ可能なツリーをレンダリングしていて、トグルとして円形の境界線を持つプラス/マイナスのアイコンが必要だとしましょう。描画関数はすでに巨大であるため、独自の関数でプラス記号を描画するためのコードが必要です。draw/update メソッドが適切な配置を処理します。
1 つのオプションは、既存のコンテナーを関数に渡すことです。
createPlus(node).attr({
x: 10,
y: 10
});
function createPlus(node){
var group = node.append('g');
// Add stuff...
return group;
}
@Drew と @Paul の手法を適用して、添付されていない要素を作成することで、これを改善できます。
node.append(createPlus())
.attr({
x: 10,
y: 10
});
function createPlus(){
var group = d3.select(document.createElementNS(d3.ns.prefix.svg, 'g'));
// Add stuff...
return group;
}
append()
ただし、文字列または関数のいずれかが必要なため、エラーがスローされます。
名前は、定数文字列として、または追加する DOM 要素を返す関数として指定できます。
したがって、次のように変更します。
node.append(function(){
return createPlus();
});
しかし、それでもうまくいきません。次のエラーが発生します。
TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.
幸いなことに、selection.node()
どちらが機能するかを見つけました!確かに、私には理由がわかりません。
function createPlus(){
var group = d3.select(document.createElementNS(d3.ns.prefix.svg, 'g'));
// Add stuff...
return group.node();
}
createPlus
匿名関数を次のように移動することで、もう少し時間を節約できます。
node.append(createPlus())
function createPlus(){
return function(){
var group = d3.select(document.createElementNS(d3.ns.prefix.svg, 'g'));
// Add stuff...
return group.node();
}
}