Как динамически фильтровать ссылки в сети узловых ссылок в Protovis? - PullRequest
1 голос
/ 17 марта 2011

Мой код основан на образце кода Protovis для Формы с принудительным направлением . Я хотел бы добавить возможность динамической фильтрации ссылок с помощью ползунка на основе их значения. У меня уже работает базовый слайдер. Чего я не знаю, так это как обновить объект Network, чтобы отображать только те ссылки, которые имеют значение больше значения на слайдере. Кто-нибудь знает как это сделать?

Код для создания графика:

var minLinkValue = 2;
var vis = new pv.Panel()
    .width(w)
    .height(h)
    .fillStyle("white")
    .event("mousedown", pv.Behavior.pan())
    .event("mousewheel", pv.Behavior.zoom());

var force = vis.add(pv.Layout.Force);
force.nodes(grafica.nodes);
force.links(grafica.links.filter(function(d) { return d.value > minLinkValue} ));

force.link.add(pv.Line);

force.node.add(pv.Dot)
    .fillStyle(function(d) { return color(d) })         
    .strokeStyle(function() { return this.fillStyle().darker() })
    .lineWidth(1)
    .title(function(d) { return d.nodeName })
    .visible(function(d) { return d.linkDegree > 0 })
    .event("mousedown", pv.Behavior.drag());

vis.render();

Я создаю слайдер с html5

<input type="range" min="0" max="20" value="2" step="1" onchange="setAndShowNewValue(this.value)" />
<span id="range">2</span>

И установить новое минимальное значение с помощью

    function setAndShowNewValue(newValue)
    {
        document.getElementById("range").innerHTML=newValue;
        minLinkValue = newValue;
    }

Спасибо, Raul

1 Ответ

0 голосов
/ 18 марта 2011

Хорошо, ответ был в теме на Protovis google group

Итак, я создал следующую функцию и вызвал ее после обновления минимального значения, разрешенного для ссылки:

function filterLinks() { 
        force.links(grafica.links.filter(function(d) { return d.value > 
minLinkValue} )); 
        force.reset(); 
} 

Затем я исправил код в protovis, как предложено в упомянутой теме

...