d3のメンタルモデルでは、.select()を呼び出すと、選択にどのデータがバインドされるのかを変更してはいけません。バインドされたデータを.select()で呼び出すのがなぜですか?
私は.select()を呼び出すケースに遭遇し、それを機能を渡してきたがバインドされたデータを変更し、私は私のメンタルモデルと間違って何の説明をいただければ幸いです。ここで
は、最小限のケースです:
// Setup
let body = d3.selectAll('body')
let exampleData =
[
{_id:"groupOne", items:['one','two']},
{_id:"groupTwo", items:['three','four']}
];
// Add some divs
body.selectAll('div').data(exampleData).enter().append('div');
// Add some p children of the divs
body.selectAll('div').selectAll('p').data((d)=>d.items).enter().append('p').text((d)=>d);
// Issue
console.log(body.selectAll('div').data()); // data is the same as exampleData
body.selectAll('p').select(function(){return this.parentNode}); // Select parents of all p
console.log(body.selectAll('div').data()); // Data is now ["two","four"]
、ここではbl.ocks.orgのライブバージョンです。 D3の文書から
おかげで - ここに私の一部にRTFMに失敗したことを - 私は、 .selectが状態を変更したことに驚きました。何とか.data()コールまで変更がないと思いました。しかし、私はあなたが私の「選択親」機能を声明に変えなければならないと言っている理由は分かりません。私はそれを試して、私はnullの選択で終わる。選択のためのドキュメントは、セレクタまたは関数を取ると言う...私はそこに直接要素を渡すことについて何かを見つけることができません。何か不足していますか? – foobarbecue
また、データコンテンツを変更せずに親を選択する方法はありますか? – foobarbecue
@foobarbecueねえ!遅く返事をして申し訳ありません(私は眠りにつきました; P)私はあなたが私の提案でヌルになってしまったのかどうかわかりませんが、ここで私が意味していたことのバイブルです。 https://jsfiddle.net/fchr2f3o/ – echonax