¿Hay alguna forma de pluralizar algún texto usando knockoutjs?
-
25-10-2019 - |
Pregunta
Las expresiones de unión a datos de texto pueden tener solo una propiedad. ¿Cómo pluralizaría algún texto dependiendo del recuento de otra propiedad?
Solución
Hay varias maneras de hacer esto. Demostré 2 maneras en los violinistas que se muestran aquí: http://jsfiddle.net/njj2p/2/
La primera opción que mostré es usar un ko.computed para determinar si el nombre debe devolverse en forma singular o plural, en función de una evaluación.
this.formattedName = ko.computed(function() {
return this.qty() > 1 ? this.name() + "s" : this.name();
}, this);
La segunda opción muestra cómo hacer esto sin una propiedad calculada y, en cambio, utilizando un enlace condicional.
<span data-bind="if:qty()>1">s</span>
Otros consejos
Puede crear un enlace personalizado reutilizable como lo siguiente.
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));
}
};
Lo usarías así.
<span data-bind="pluralize: { data:items, singular:'entry', plural:'entries' }"></span>
- los
data
La opción puede apuntar a cualquier matriz o número. - los
singular
La opción representa el texto que desea mostrar sidata
evalúa a 1 - los
plural
La opción representa el texto que se mostrará de otra manera.
Véalo en acción aquí.http://fiddle.jshell.net/jessegavin/wamfw/
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow