我试图使用d3.js内的函数来避免代码重复,但我在这样做时遇到了麻烦。如何使用创建和使用d3.js内的函数
例如,我有这样的一行:
attr('transform', bi.translate(axisMargin.left + settings.category_padding, 0));
现在,axisMargin.left
使用功能本身得到它的价值,它确实是这样的:
leftMargin = d3.max(chart_data.Data, function(data) {
return (data.Category.Name.length + (data.Group === null ? 0 : data.Group.Name.length)) * settings.text_letter_width + settings.text_min_width;
});
axisMargin = {
left: leftMargin,
bottom: 50,
group: 5
};
不过,我不知道需要使用任何类似d3.max
或需要任何其他数据,所以我想要做这样的事情:
category_padder = function() {
return (parentRect.width < 940) ? 50 : 125;
};
settings = {
category_padding: category_padder,
};
但是它不工作,我得到的错误:
Error: attribute transform: Expected ')', "translate(358function()
结构:
bi.models.barchart = function(chart_data) {
var settings, axisMargin, leftMargin, category_padder;
// Settings and functions reside here
// Calls to functions may be called here
chart = function() {
// Calls to functions may be called here too
}
}
我在做什么错在这里?
'bi.translate'的返回值是什么? –
难道你没有打电话的乐趣。像'settings.category_padding = category_padder()'而不是'settings.category_padding = category_padder'? – Sidtharthan
@GerardoFurtado嗯.....返回的值是这样的:'translate(358function(){ return(parentRect.width <940)?50:125; },0)' - '358'将是'axisMargin.left'的值。 – Brett