Last Updated: February 25, 2016
·
944
· jorgelig

Bootstrap slider con array de datos definido usando custom bindings de knockout

javascript

ko.bindingHandlers.bootstrapSlider = {
    init: function(element, valueAccessor, allBindingsAccesor, viewModel, bindingContext){
        var opts = ko.utils.unwrapObservable(valueAccessor());
        var array = opts.array;
        var initMin = array != undefined ? 0 : opts.minVal;
        var initMax = array != undefined ? array.length - 1 : opts.maxVal;
        var minValue = opts.minValueObservableName;
        var maxValue = opts.maxValueObservableName;

        $(element).slider({
            min: initMin,
            max: initMax,
            tooltip: 'hide',
            step: array != undefined ? 1 : opts.step,
            value: [initMin, initMax]
        })
        .on('slide', function(evt) {
            var min = evt.value[0];
            var max = evt.value[1];

            //Seteando el observable por nombre como string
            viewModel[minValue](array[min]);
            viewModel[maxValue](array[max]);
        });
        viewModel[minValue](array[initMin]);
        viewModel[maxValue](array[initMax]);
    }
};

var myModel = function(){
    var self = this;

    self.precios = ko.observableArray([10, 100, 500, 3000, 5000, 10000]);
    self.minPrecio = ko.observable();
    self.maxPrecio = ko.observable();
};

ko.applyBindings(new myModel(), $("#Filtro")[0]);

html

<div id="Filtro" class="hero-unit">
        <div class="row-fluid">
            <div class="span3">$<span data-bind="text: minPrecio">-</span></div>
            <div class="span6">
                <input class="slider" type="text" data-bind="bootstrapSlider: { array: precios(), minValueObservableName: 'minPrecio', maxValueObservableName: 'maxPrecio' }" />
            </div>
            <div class="span3">$<span data-bind="text: maxPrecio">-</span></div>            
        </div>
</div>

Ejemplo en jsfiddle

Fuente

Have a fresh tip? Share with Coderwall community!

Post
Post a tip
Did you know?

JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.

Security insights from Cside