【发布时间】:2017-07-30 08:20:40
【问题描述】:
我正在尝试使用 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,
};
但它不起作用,我收到错误:
错误:属性转换:预期为 ')',"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? -
@GerardoFurtado 嗯.....返回值是这样的:
translate(358function () { return (parentRect.width < 940) ? 50 : 125; }, 0)-358将是axisMargin.left的值。 -
如您所见,这是完全错误的。应该只是
attr("transform", "translate(" + (axisMargin.left + settings.category_padding) + ", 0)"); -
@Siddharthan 我认为这不重要吗?
标签: javascript d3.js charts