Кросс-пост с ответом. В целом:
Ты почти понял. Странно то, что ваши селекторы кажутся
быть инвертированным: RFSubPane находится внутри RFPane, поэтому вы должны выбрать
сначала панели Есть две панели, так что вы можете присоединить их к своему
массив двухэлементных меток:
var pane = d3.selectAll(".RFPane")
.data(labels);
Теперь, если я правильно понимаю, вы хотите добавить элемент select в
каждой подпанели, используя параметры из базовой панели. Так как ты
используя selectAll (есть несколько элементов), подпанели не будут
автоматически наследовать данные из панели. Если вы знаете, что там
всегда две подпанели на панель, вы можете дублировать данные:
var subpane = pane.selectAll(".RFSubPane")
.data(function(d) { return [d, d]; });
Теперь вы можете создать элемент select и, расширив данные
массив, дочерние параметры:
subpane.append("select").selectAll("option")
.data(function(d) { return d; })
.enter().append("option")
.text(function(d) { return d; ]);
Mike
P.S. Если существует переменное количество подпанелей, вы можете использовать
pane.each, чтобы создать контекст, в котором вы можете получить доступ к родительским данным,
может быть так:
pane.each(function(d, i) {
var subpane = d3.select(this).selectAll(".RFSubPane");
});
В этом случае вам на самом деле не нужно привязывать данные к подпанелям,
и вы можете сказать selectAll("option").data(d)
вместо того, чтобы использовать
функция.