Skip to content

Instantly share code, notes, and snippets.

@mika76
Created March 13, 2015 12:06
Show Gist options
  • Save mika76/275f2cac9b856a2b0b7c to your computer and use it in GitHub Desktop.
Save mika76/275f2cac9b856a2b0b7c to your computer and use it in GitHub Desktop.
C3.JS Knockout bindings
ko.bindingHandlers.chartColumns = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var columns = ko.unwrap(valueAccessor()),
options = ko.unwrap(allBindings.get('chartOptions')) || {};
options = $.extend(true, options, {
bindto: element,
data: {
columns: columns
}
});
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$.data(element, 'chart').destroy();
});
$.data(element, 'chart', c3.generate(options));
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var columns = ko.unwrap(valueAccessor())
//options = ko.unwrap(allBindings.get('chartOptions')) || {};
options = {
columns: columns,
unload: true
};
$.data(element, 'chart').load(options);
}
};
ko.bindingHandlers.chartOptions = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
if (!allBindings.has('chartColumns')) {
throw Error('chartOptions must be used in conjunction with chartColumns');
}
}
};
/* Example usage
Note: Chart_ActiveMachines should return a columns array (or arrays) as defined for type of chart in c3.js
<div data-bind="
chartColumns: Chart_ActiveMachines,
chartOptions : {
data : {
type: 'donut'
},
donut: {
title: Machines().length
}
}">
</div>
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment