Почему GetClusterShape возвращает null, когда спецификация кластера была получена с помощью метода GetClusteredShapes? - PullRequest
1 голос
/ 22 апреля 2009

Предположим, у меня есть слой виртуальной формы земли, называемый shapeLayer1 (моя творческая энергия, очевидно, находится на рекордно низком уровне).

Когда я вызываю метод GetClusteredShapes, я получаю массив объектов VEClusterSpecification, которые представляют каждый из моих видимых кластеров; нет проблем там. Но когда я вызываю метод GetClusterShape(), он возвращает нуль ... ноль! С какой стати это так? Я использовал firebug, чтобы подтвердить, что закрытая переменная VEClusterSpecification, которая должна содержать ссылку на фигуру, действительно равна нулю, поэтому не метод, вызывающий проблему.

Некоторые предположили , что это действительно задокументированное поведение

Возвращает ноль , если объект VEClusterSpecification был возвращен из метода VEShapeLayer.GetClusteredShapes

Но, глядя на текущую документацию MSDN для класса VEShape , там написано:

Возвращает, если объект VEClusterSpecification был возвращен из метода VEShapeLayer.GetClusteredShapes

Это ошибка или особенность? Есть какие-нибудь известные обходные пути или (если это ошибка) какой-то план, когда они собираются это исправить?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2010

Если вам нужно получить идентификатор слоя из слоя, которому принадлежит кластерная форма, вы можете сделать это следующим образом:

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

если вы найдете другой способ, пожалуйста, сообщите нам; -)

0 голосов
/ 12 марта 2010

Я знаю, что это достаточно ... Я все еще смотрю на код, но из того, что я могу сказать, они хотят, чтобы вы устанавливали пользовательские вещи, используя метод обратного вызова VEClusteringOptions. Это не работает для меня, потому что я использую пользовательский информационный блок, но это может помочь кому-то еще, используя метод ниже, у вас есть полный доступ к фигурам внутри кластера.

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);
}
...