JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/Chart.js/0.2.0/Chart.min.js"></script>
<p>
    <button data-bind="click: showBar">Barras</button>
    <button data-bind="click: showLine">LĂ­neas</button>
</p>
<canvas width="200" height="200" data-bind="chartType: type, chartData: sales"></canvas>

JavaScript

ko.bindingHandlers.chartType = {
    init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
        if (!allBindings.has('chartData')) {
            throw Error('chartType must be used in conjunction with chartData and (optionally) chartOptions');
        }
    },
    update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
        var ctx = element.getContext('2d'),
            type = ko.unwrap(valueAccessor()),
            data = ko.unwrap(allBindings.get('chartData')),
            options = ko.unwrap(allBindings.get('chartOptions')) || {},
            chart = new Chart(ctx);

        chart[type](data, options);
    }
};

ko.bindingHandlers.chartData = {
    init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
        if (!allBindings.has('chartType')) {
            throw Error('chartData must be used in conjunction with chartType and (optionally) chartOptions');
        }
    }
};

ko.bindingHandlers.chartOptions = {
    init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
        if (!allBindings.has('chartData') || !allBindings.has('chartType')) {
            throw Error('chartOptions must be used in conjunction with chartType and chartData');
        }
    }
};

var model = {
    showLine: function () {
        this.type('Line');
    },
    showBar: function () {
        this.type('Bar');
    },
    type: ko.observable('Bar'),
    sales: ko.observable({
        labels: ['Q1', 'Q2', 'Q3', 'Q4'],
        datasets: [{
            label: 'Helados',
            fillColor: '#152491',
            data: [2, 14, 25, 8]
        }, {
            label: 'Sopas',
            fillColor: '#A31011',
            data: [16, 11, 1, 15]
        }]
    })
};

ko.applyBindings(model);