15 votes

Knockout : liens à cliquer et à cocher dans un seul élément

J'ai un tableau de limites, et des cases à cocher pour activer/désactiver les limites. Mais les cases à cocher ne fonctionnent pas

jsFiddle

function Limit(start, end)
{
    var that = this;

    this.start = start;
    this.end = end;

    this.label = ko.computed(function(){
        return that.start + ' - ' + that.end;            
    });
}

function ViewModel()
{
    var that = this;

    this.limits = [new Limit(1,2), new Limit(3,4), new Limit(4,5)];

    this.activeLimit = ko.observable(that.limits[0]);

    this.changeActiveLimit = function(limit)
    {
            that.activeLimit(limit);
    }
}

ko.applyBindings(new ViewModel());

Mon HTML

<div data-bind="foreach: {data: limits, as: 'limit'}">
 <input type="checkbox" data-bind="click: $root.changeActiveLimit, checked: limit.label == $root.activeLimit().label"/>
    <span data-bind="text: limit.label"/> 

</div>

14voto

Tariqulazam Points 3295

Si vous modifiez votre viewModel comme ci-dessous, cela fonctionnera.

function ViewModel()
{
    var that = this;

    this.limits = [new Limit(1,2), new Limit(3,4), new Limit(4,5)];

    this.activeLimit = ko.observable(that.limits[0]);

    this.changeActiveLimit = function(limit)
    {
            that.activeLimit(limit);
            return true;
    }
}

retourner vrai est la partie critique ici.

Voici un violon qui fonctionne http://jsfiddle.net/tariqulazam/WtPM9/10/

13voto

Lerin Sonberg Points 55

La clé est de retourner vrai ; à la fin de la fonction de gestion du clic ! Cela met à jour l'interface utilisateur correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X