我試圖使用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