文本数据绑定表达式只能有一个属性。我如何根据另一个属性的数量复数化一些文本?有什么方法可以用knockoutjs复数化一些文本
回答
有几种方法可以做到这一点。我在这里展示的小提琴中展示了两种方法: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
选项的文本表示将另行显示的文本。
我很喜欢这个解决方案。 – jaffa 2012-10-10 12:23:22
很好的回答!我建议添加一个'none'选项和一个对'count'的反向引用,这样开发人员可以得到诸如“none”=>“No items”,“singular”=>“1 item”,“复数'=>“##项目”' – 2014-11-13 22:47:08
好主意。这就是Angular所做的。 – jessegavin 2014-11-13 22:48:41
- 1. 有什么方法可以获得一些信息,至少可以捕获(...)吗?
- 2. 有一种方法以在KnockoutJS
- 3. 有什么方法可以将数据从文本文件插入数据集?
- 4. 有什么方法可以截断org.eclipse.swt.widgets.Table项目的文本
- 5. 有什么方法可以用一些REST客户端替换Symfony中的Doctrine?
- 6. 有没有什么方法可以使用'unset'作为方法?
- 7. 有什么办法可以使用libgit2sharp恢复单个文件?
- 8. Java文本属性文件:有什么方法可以测试合法性吗?
- 9. 有什么方法可以在特定文化中获得书写方向?
- 10. 一些简单的脚本。可以看到有什么问题
- 11. 有什么方法可以使用PHP或htaccess复制另一个网站。
- 12. 有什么方法可以检查你安装了哪些gulp版本?
- 13. 有什么方法可以管理onPanResponderMove?
- 14. 有什么方法可以跟踪PDF?
- 15. 有什么方法可以定制TDBadgedCell
- 16. 有什么方法可以格式化velocity文件.vm文件吗?
- 17. 有一些方法可以忽略副本上的CSS样式?
- 18. 有什么方法可以在Google Maps v3中最大化InfoWindow
- 19. 有什么方法可以简化这个流表达式?
- 20. 有什么方法可以简化codeigniter中的全局认证?
- 21. 有什么方法可以简化路径条件
- 22. 有什么方法可以修复蓝牙通讯的频率?
- 23. 有什么工具可用于可视化哪些方法调用其他Java代码方法?
- 24. 有没有什么方法可以追溯到一个javascript函数调用?
- 25. 有什么方法可以从asp.net中的CultureInfo确定文本方向?
- 26. 有什么方法可以确定.NET Portable Library中的文本方向吗?
- 27. 有没有什么方法可以在html中查看文件?
- 28. 有什么方法可以查看网站允许哪些网址参数?
- 29. 用什么方法可以将一些代码放入try catch块中,以防止JVM进行优化?
- 30. 有什么方法可以有私人数据?
我真的很想找一个干净的方法来做“y”到“ies”或“x”到“ces”等等。这个部分是很容易的部分。无论如何,我都赞成,但这不是我想要的。有任何想法吗?那里有什么? – vbullinger 2013-07-19 18:29:07
我用upvoted这个答案,因为我使用了第二个选项,稍微改变了!=而不是>,以便零值显示s(即O子项,1子项,2子项) – MikeScott8 2014-04-30 21:07:49
我同意并对我的代码进行了相同的观察和更改。 – GenuineRex 2018-01-24 15:26:08