Las expresiones de enlace de datos de texto solo pueden tener una propiedad. ¿Cómo pluralizaré un texto dependiendo del recuento de otra propiedad?¿Hay alguna forma de pluralizar texto utilizando knockoutjs
Respuesta
Existen varias formas de hacerlo. Demostré 2 maneras en los violines que se muestran aquí: http://jsfiddle.net/njj2P/2/
La primera opción que mostré es usar un ko.computado para determinar si el nombre debe ser devuelto en singular o en plural, basado en 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 su lugar mediante el uso de una unión condicional.
<span data-bind="if:qty()>1">s</span>
Puede crear un enlace personalizado reutilizable como el 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ía así.
<span data-bind="pluralize: { data:items, singular:'entry', plural:'entries' }"></span>
- La opción
data
puede apuntar a cualquier matriz o número. - La opción
singular
representa el texto que desea mostrar sidata
evalúa a 1 - La opción
plural
representa el texto que se mostrará lo contrario.
Véalo en acción aquí. http://fiddle.jshell.net/jessegavin/wamfw/
Me gusta bastante esta solución en realidad. – jaffa
¡Gran respuesta! Recomiendo agregar una opción 'ninguno' y una referencia retrospectiva al 'conteo 'para que un desarrollador pueda obtener opciones tales como'' none '=> "Sin elementos",' singular '=> "1 elemento",' plural '=> "## elementos" ' –
Buena idea. Eso es lo que hace Angular. – jessegavin
- 1. ¿Cómo pluralizar "Hay/hay N objetos/objetos"?
- 2. ¿Hay alguna forma de evitar que el enlace de envío de knockoutjs envíe el formulario al presionar la tecla enter?
- 3. ¿Hay alguna forma de vincular Keyboard.FocusedElement?
- 4. pluralizar en PHP
- 5. Cómo implementar pluralizar y otras extensiones utilizando Playframework 2.0
- 6. ¿Hay alguna forma de currying en C?
- 7. ¿Hay alguna forma de 'resaltar' el código?
- 8. ¿Hay alguna forma mejor de escribir esto?
- 9. ¿Hay alguna forma de sobrecargar + = en python?
- 10. ¿Hay alguna forma de multirreproducir un SqlDataReader?
- 11. ¿Hay alguna forma de cancelar TabControl.Items.CurrentChanging?
- 12. ¿Hay alguna forma de sincronizar archivos gif?
- 13. ¿Hay alguna forma de pasar el iPhone?
- 14. ¿Hay alguna forma de establecer el título de la página mediante enlace de datos utilizando Knockout.js?
- 15. ¿Hay alguna forma de obtener un valor de propiedad de un objeto utilizando la clase PropertyPath?
- 16. ¿Existe alguna forma sencilla de detener procesos utilizando Windows PowerShell?
- 17. ¿Hay alguna forma de capturar HotKeys/Shortcuts en Excel VSTO utilizando solo C# y sin VBA?
- 18. ¿Existe alguna forma mejor de encontrar anagramas utilizando SQL?
- 19. ¿Hay alguna forma de actualizar VS 'CSS validation to 3.0?
- 20. ¿Hay alguna forma de agregar columnas adicionales a un jstree?
- 21. ¿Hay alguna forma de establecer la alineación de texto de una columna completa en una tabla?
- 22. ¿Hay alguna forma de obtener la codificación de un archivo de texto en UltraEdit?
- 23. ¿Hay alguna forma de FALSIFICAR herencia en C#/VB.NET?
- 24. ¿Existe alguna forma mejor de agregar un diccionario utilizando LINQ?
- 25. ¿Hay alguna forma de detectar SMS en E-Mail Gateways?
- 26. ¿Hay alguna manera de lograr el enlace de datos múltiples para un solo elemento en KnockoutJS?
- 27. ¿Hay alguna forma de filtrar un rastreo de SQL Profiler?
- 28. ¿Hay alguna forma de copiar el código del Eclipse IDE sin el formato de texto enriquecido?
- 29. ¿Hay alguna forma de comprobar si el texto de un TextView está truncado?
- 30. ¿Hay alguna forma de invocar manualmente el evento "Introducir clave" en un cuadro de texto?
Realmente estoy buscando una manera limpia de hacer "y" a "ies" o "x" a "ces", etc. Esta parte es algo fácil. Subí de todos modos, pero no es lo que quiero. ¿Algunas ideas? ¿Hay algo por ahí? – vbullinger
Volví a subir esta respuesta porque utilicé la segunda opción, con un ligero cambio a! = En lugar de> para que un valor de cero muestre la s (es decir, O subelementos, 1 subelemento, 2 subelementos) – MikeScott8
Estoy de acuerdo e hice la misma observación y cambio a mi código. – GenuineRex