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?

¿Fue útil?

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 si data 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
scroll top