Est-il possible de pluralize texte à l'aide knockoutjs
-
25-10-2019 - |
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é?
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 sidata
Evalue à 1 - L'option
plural
représente le texte qui sera affiché autrement.
voir en action ici. http://fiddle.jshell.net/jessegavin/wamfw/