JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.js"></script>
<table>
<tbody>
    <!-- ko foreach:items -->
    <tr>
    <td>
        <span data-bind="text:post"></span>
    </td>
    <td data-bind="heat:{value:val,context:'test'}"></td>
</tr>
<!-- /ko -->
</tbody>
</table>

CSS

td{padding:5px; font-weight:bolder;}

JavaScript

(function() {        

ko.bindingHandlers.heat = {
            init: function (element, value, allBindings, viewModel, bindingConext) {
                var item = value();
                var model = bindingConext.$root;

                if (!model["koHeat"])
                    model["koHeat"] = {};

                if (!model["koHeat"][item.context])
                    model["koHeat"][item.context] = ko.observable(new HeatContext());

                var ctx = model["koHeat"][item.context];

                if (!isNaN(item.value)) {
                    if (+item.value > ctx().max()) ctx().max(+item.value);
                    if (+item.value < ctx().min()) ctx().min(+item.value);
                    ctx().elements.push(element);
                }

                $(element).html(item.value).data('koHeat', item.value);

                //set value

                function HeatContext() {
                    var self = this;
                    this.max = ko.observable(0);
                    this.min = ko.observable(Number.MAX_VALUE);
                    this.elements = ko.observableArray([]);

                    this.setHeat = ko.computed(function () {

                        var max = self.max(),
                            min = self.min(),
                            elems = self.elements(),
                            mid = (max + min) / 2,
                            range = max - min,
                            r, g, b, x;

                        for (var i = 0; i < elems.length; i++) {
                            var val = $(elems[i]).data('koHeat');
                            x = (val - mid) / range;
                            if (x > 0) {
                                g = Math.abs(Math.round(x* 100));
                                b = 0.0;
                                r = Math.abs(Math.round((1.0 - x) * 100));
                            } else {
                                g = Math.abs(Math.round(x * 100));
                         ...