Question

texte les expressions données-bind ne peuvent avoir qu'une seule propriété. Comment puis-je pluralize un texte en fonction du nombre d'une autre propriété?

Était-ce utile?

La solution

Il y a plusieurs façons de le faire. Je démontrais 2 façons les vièles présentées ici: http://jsfiddle.net/njj2P/2/

La première option, j'ai montré est d'utiliser un ko.computed pour déterminer si le nom doit être retourné au singulier ou au pluriel, sur la base d'une évaluation.

  this.formattedName = ko.computed(function() {
        return this.qty() > 1 ? this.name() + "s" : this.name();
    }, this);

La deuxième option montre comment faire cela sans une propriété calculée, et au lieu en utilisant une condition obligatoire.

<span data-bind="if:qty()>1">s</span>

Autres conseils

Vous pouvez créer une réutilisable contraignante comme suit.

ko.bindingHandlers.pluralize = {
  update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
    function count(data) {
        var value = ko.utils.unwrapObservable(data);
        if (typeof value === "object" && value.length > 0) {
            return value.length;
        } else if (typeof value === "number") {
            return value;
        }
    }

    var settings = valueAccessor();
    var text = count(settings.data) === 1 ? settings.singular : settings.plural;
    $(element).text(ko.utils.unwrapObservable(text));
  }
};

On peut l'utiliser comme ça.

<span data-bind="pluralize: { data:items, singular:'entry', plural:'entries' }"></span>
  • L'option data peut pointer vers un réseau quelconque ou le numéro.
  • L'option singular représente le texte que vous souhaitez afficher si data Evalue à 1
  • L'option plural représente le texte qui sera affiché autrement.

voir en action ici. http://fiddle.jshell.net/jessegavin/wamfw/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top