我正在尝试向Chart JS数据集添加额外的属性(用于饼图/甜甜圈图)。我在后端有一块Ruby,可以在视图中打印以下JSON:
[
{"segment": "undetermined",
"label": "Undetermined",
"value": 420193,"
color": "#DECF3F",
"highlight": "#e2d455"
},
{"segment":"peer_review",
"label":"Peer Review",
"value":415212,
"color":"#60BD68",
"highlight":"#72c479"
}
]
“ segment”属性是我想在前端的JS上提供的另一个属性(库未提供)。但是,当我将此JSON包装在
canvas
标记中时,无法通过JS访问它。下面的第二行输出上述JSON:
<canvas id="review-type" height="235" data-facet="review_status_s">
<%= @by_review_type %>
</canvas>
我正在尝试通过使用
getSegmentsAtEvent()
API调用(意外发生名称冲突)访问“段”属性: $("#review-type").click(
function(evt) {
var activePoints = reviewChart.getSegmentsAtEvent(evt);
/* extract other properties, then build an URL from them: */
var url = "/" +locale+ "/catalog?f[" +facet_frag+ "][]=" +segment+ "&q=*:*";
window.location = url;
}
);
但是,当我在JS控制台中检查
activePoints
时,“段”不在属性列表中。我该怎么办?
最佳答案
getSegmentsAtEvent
(及其等效于其他图表类型)返回图表元素(扇区,点,条形图等)。您必须使用任何图表元素属性和数据对象来找出索引,然后使用该索引来获取所需的其他属性。
例如,如果pieData
是您的数据对象
$("#review-type").click(
function (evt) {
var activePoints = reviewChart.getSegmentsAtEvent(evt);
if (activePoints.length)
alert(pieData.filter(function (e) { return e.label === activePoints[0].label; })[0].segment);
...
您还可以在从对象传输到元素的属性上设置其他属性(例如
label
),但这有点麻烦。小提琴-http://jsfiddle.net/nm9ay728/