JIT добавление цвета графа подграфа
У меня есть радиальный график, показывающий два уровня узлов. При нажатии на узел можно добавить подграф с вызовом функции sum(). Все работает отлично, кроме установки индивидуального цвета для вновь добавленных краев. Кто-нибудь когда-нибудь пытался загрузить подграфы с отдельными краями или есть подсказка, что я делаю неправильно?
Здесь я получаю и добавляю подграф:
subtree = getSubtree(node.id);
//perform animation.
subtree.success(function(data){
rg.op.sum(data, {
type: 'fade:seq',
fps: 40,
duration: 1000,
hideLabels: false,
});
});
Я также проверил загруженные данные, но для меня они полностью совпадают. Я также загрузил те же данные в исходный график вместо вложенного графика, а затем он был окрашен правильно. Тем не менее, вот некоторые тестовые данные, которые являются результатом функции getSubtree (идентификатор "placeholder" соответствует идентификатору существующего, где должен быть добавлен подграф):
{
"id": "placeholder1",
"name": "country",
"children": [{
"id": "2_3mSV~_scat_1",
"name": "hyponym",
"children": [{
"children": [],
"adjacencies": {
"nodeTo": "2_3mSV~_scat_1",
"data": {
"$color": "#29A22D"
}
},
"data": {
"$color": "#29A22D"
},
"id": "3_58z3q_sc_174_6",
"name": "location"
}],
"data": {
"$type": "star",
"$color": "#666666"
},
"adjacencies": [{
"nodeTo": "3_58z3q_sc_174_6",
"data": {
"$color": "#29A22D"
}
}]
}]
}
1 ответ
Я наконец нашел проблему в самой структуре...
При вызове функции конструкции внутри вызова sum(), который фактически добавляет поддерево, объект данных, содержащий информацию об индивидуальной визуализации смежности, не используется для добавления новой смежности. Поэтому я изменил код вручную (этот цикл for является новой версией существующего цикла внутри функции construct()):
for(var i=0, ch = json.children; i<ch.length; i++) {
//CUSTOM CODE: GET DATA OF THIS ADJACENCE
data = null;
if(ch[i].adjacencies[0]==undefined){
data = ch[i].adjacencies.data;
}
else{
data = ch[i].adjacencies.data;
}
ans.addAdjacence(json, ch[i], data);
arguments.callee(ans, ch[i]);
//CUSTOM CODE END
}