J'essaie d'implémenter l'info-bulle au survol d'un nœud particulier dans le graphe dirigé par la force en utilisant d3 js.
Comportement actuel: l'info-bulle est en cours de chargement mais le texte ne s'affiche pas correctement, il montre [objet objet ] au lieu d'un message texte approprié.
Résultat attendu: l'info-bulle doit afficher le texte dans le format ci-dessous:
function showToolTip(selectedNode) {
var itemDetails = [
{'Item': selectedNode.name},
{'Item Id': selectedNode.id},
{'status': 'Normal'},
{'Supplier': 'Supplier1'},
];
tooltip.transition().duration(200).style('visibility', 'visible')
.style('position', 'absolute').style('left', (d3.event.pageX) - 15 + 'px').style('top', (d3.event.pageY - 10) + 'px');
tooltip.selectAll('div').data(itemDetails).enter().append('div').text(function (d, i) { return d; });
}
function hideTooltip() {
tooltip.selectAll('*').remove();
tooltip.transition().duration(500).style('visibility', 'hidden');
}
Comment y parvenir?
Violon fonctionnel: Info-bulle
Item Name: 'Item1', Item Id: 'Item1', Supplier: 'Supplier1'
3 Réponses :
La donnée de chaque La meilleure idée est de traiter l'objet dans la méthode Voici le JSFiddle fourchu: https://jsfiddle.net/ou85b3n1/ text () , d'où le résultat que vous ' text () , en spécifiant exactement ce que vous voulez afficher (clés et valeurs), et comment. En attendant, une solution très simple et naïve est la suivante: .text(function (d, i) {
return Object.entries(d)[0].join(": ");
});
Vous pouvez faire:
return d
Au lieu de:
return `${Object.keys(d)[0]}: ${d[Object.keys(d)[0]]}`
Dans votre fonction showToolTip p >
Vous obtenez cette erreur (qui est un comportement attendu) car vous renvoyez l'objet complet au lieu d'une chaîne.
function showToolTip(selectedNode) {
tooltip.transition().duration(200).style('visibility', 'visible')
.style('position', 'absolute').style('left', (d3.event.pageX) - 15 + 'px').style('top', (d3.event.pageY - 10) + 'px');
tooltip.append('div').text(`Item: ${selectedNode.name}`);
tooltip.append('div').text(`Item Id: ${selectedNode.id}`);
tooltip.append('div').text(`Status: Normal`);
tooltip.append('div').text(`Supplier: Supplier1`);
}
https://jsfiddle.net/nh4fdw03/1/