2 개의 범위 슬라이더를 사용하여 나이와 높이를 기준으로 테이블의 데이터를 동시에 필터링하려고합니다.두 개의 범위 슬라이더를 동시에 사용하려면 어떻게해야합니까?
d3.slider.js 및 dc.dataTable
을 사용하여 2 개의 범위 슬라이더 (나이 및 높이)를 구현했습니다. 나는이 두 범위 슬라이더를 동시에 사용하고 싶지만 제대로 작동하지 않는 것 같습니다.
또한이 테이블 아래에는 "49 개의 레코드 중에서 49 개가 선택되었습니다."라는 텍스트가 있습니다. 슬라이더를 사용하는 동안 숫자는 바뀌지 않습니다.
코드 :
var dataTable = dc.dataTable("table#list");
var dispatch = d3.dispatch('load','filter');
d3.json('data.json',function(json){
dispatch.load(json)
});
dispatch.on('load',function(json) {
var formatNumber = d3.format(",d");
var facts = crossfilter(json);
var dimensionAge = facts.dimension(function(d) {
return +d.age;
});
var accessorAge = function(d) {
return d.age;
};
var dimensionHeight = facts.dimension(function(d) {
return +d.height;
});
var accessorHeight = function(d) {
return d.height;
};
var range = d3.extent(json, accessorAge);
var range2 = d3.extent(json, accessorHeight);
var all = facts.groupAll();
d3.select("div#slider3")
.call(d3.slider().axis(true).min(range[0]).max(range[1]).value(range)
.on("slide", function(evt,value) {
dispatch.filter(value);
d3.select("#slider3textmin").text(Math.floor(value[0]));
d3.select("#slider3textmax").text(Math.floor(value[1]))
}))
d3.select("div#slider4")
.call(d3.slider().axis(true).min(range2[0]).max(range2[1]).value(range2)
.on("slide", function(evt,value) {
dispatch.filter(value);
d3.select("#slider4textmin").text(Math.floor(value[0]));
d3.select("#slider4textmax").text(Math.floor(value[1]))
}))
FieldNames = [
"",
"Age",
"Weight",
"Height",
"Eye Color",
"Hair Color",
"Race",
"Sex",
"Annual Income"
];
d3.select("tr#FieldNames").selectAll("th")
.data(FieldNames)
.enter()
.append("th")
.append("text")
.text(function(d){
return d;
});
dataTable
.dimension(dimensionAge)
.group(function(d) {
return d.sex;
})
.columns([
function(d) {return "";},
function(d) {return d.age;},
function(d) {return d.weight;},
function(d) {return d.height;},
function(d) {return d.eyeColor;},
function(d) {return d.hairColor;},
function(d) {return d.race;},
function(d) {return d.sex;},
function(d) {return formatNumber(d.annualIncome);}
]);
dispatch.on('filter',function(value){
dataTable.replaceFilter(dc.filters.RangedFilter(value[0], value[1]));
dataTable.redraw();
})
dc.dataCount(".dc-data-count")
.dimension(facts)
.group(all);
dc.renderAll();
});
수도, pl 용이성, 테이블 아래의 "49 개의 레코드 중에서 선택된 49"텍스트로 문제를 해결 하시겠습니까? 나이 슬라이더를 사용하면 숫자가 전혀 변경되지 않습니다. 또한 "모두 재설정"링크가 제대로 작동하지 않습니다. –
Plunker에 익숙하지 않아'redrawGroup' 변경 사항을'filterAge'에 저장하지 못했습니다. 이 문제를 수정하고 ** Reset All **을 내 답변에 추가했습니다. – Gordon
@ Gordon 나는 대답을 편집하고 싶지만 나는 plunker를 편집하는 법을 몰랐다. 미안 .. – KEKUATAN