有没有任何方法可以使用knockoutjs将一些文本复数化

Is there any way to pluralize some text using knockoutjs

本文关键字:文本 方法 任何 可以使 knockoutjs 有没有      更新时间:2023-09-26

文本数据绑定表达式只能有一个属性。如何根据另一个属性的计数将某些文本复数化?

有几种方法可以做到这一点。我在这里展示了两种方法:http://jsfiddle.net/njj2P/2/

我展示的第一个选项是使用ko.computed,根据评估来确定名称应该以单数还是复数形式返回。

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

第二个选项显示了如何在没有计算属性的情况下,而是使用条件绑定来实现这一点。

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

您可以创建一个可重用的自定义绑定,如下所示。

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));
  }
};

你会这样用的。

<span data-bind="pluralize: { data:items, singular:'entry', plural:'entries' }"></span>
  • data选项可以指向任何数组或数字
  • singular选项表示如果data的计算结果为1,则要显示的文本
  • plural选项表示将以其他方式显示的文本

请在此处查看它的实际操作。http://fiddle.jshell.net/jessegavin/wamfw/

相关文章: