2009-04-22 13 views
1

Supposons que j'ai une couche de forme de terre virtuelle appelée shapeLayer1 (mon énergie créatrice est apparemment à son niveau le plus bas). Lorsque j'appelle la méthode GetClusteredShapes, j'obtiens un tableau de VEClusterSpecification objets qui représentent chacun de mes clusters visibles actuellement; pas de problème là-bas. Mais quand j'appelle la méthode GetClusterShape() elle renvoie null ... null! Pourquoi diable ferait-il cela? J'ai utilisé firebug pour confirmer que la variable privée du VEClusterSpecification supposée contenir une référence à la forme est en effet nulle, donc ce n'est pas la méthode qui cause le problème.Pourquoi GetClusterShape renvoie-t-il une valeur nulle lorsque la spécification de cluster a été récupérée via la méthode GetClusteredShapes?

Some have suggested que cela est en fait un comportement documenté

retours null si un objet VEClusterSpecification a été renvoyée par la méthode VEShapeLayer.GetClusteredShapes

Mais en regardant le MSDN documentation for the VEShape class actuel, il dit:

Retourne si un objet VEClusterSpecification a été renvoyé à partir de la méthode VEShapeLayer.GetClusteredShapes

Est-ce un bug ou une fonctionnalité? Y a-t-il des solutions de contournement connues ou (si c'est un bogue) certains prévoient quand ils vont le réparer?

Répondre

0

Je le sais sux ... Je regarde toujours le code, mais d'après ce que je peux dire, ils veulent que vous définissiez les choses personnalisées en utilisant la méthode de rappel VEClusteringOptions. Cela ne fonctionne pas pour moi parce que j'utilise une infobox personnalisée, mais cela peut aider quelqu'un d'autre, en utilisant la méthode ci-dessous, vous avez un accès complet aux formes à l'intérieur du cluster.

function clusteringCallback(clusters) 
{ 
    for (var i=0; i < clusters.length; ++i) 
    { 
     var cluster = clusters[i]; 
     var clusterShape = cluster.GetClusterShape(); 
     clusterShape.SetCustomIcon("<div class='cluster'><div class='text'>"+cluster.Shapes.length+"</div></div>"); 
     clusterShape.SetTitle("This is my Cluster #" + i); 
     clusterShape.SetDescription("This cluster has " + cluster.Shapes.length + " shapes in it!"); 
    } 
} 

function SetClustering() 
{ 
    var options = new VEClusteringOptions(); 
    options.Callback = clusteringCallback; 
    shapeLayer.SetClusteringConfiguration(VEClusteringType.Grid, options); 
} 
0

Si vous avez besoin pour obtenir l'ID de couche de la couche qui la clustershape appartient à vous pouvez le faire comme ceci:

var layerId = clusters[i].Shapes[0].GetShapeLayer().MsnId; 

si vous trouvez une autre façon, s'il vous plaît nous informer ;-)