2012-08-14 71 views
2

我认为,我需要自定义绑定,如何在knockout.js中缩短名称?

如果文本长于n个字符,请放置“...”并在工具栏上显示工具提示。

<div data-bind="shortenText:name, maxLength:10" ></div> 
+0

你说得对,没有任何建设 - 在为此绑定。 – Niko 2012-08-14 08:13:41

+1

您可以使用ko.computed绑定截断文本和工具提示的常用绑定 – vadim 2012-08-14 11:22:12

+1

好主意,但我必须为每个需要此功能的属性创建计算属性。 – ozz 2012-08-14 11:50:10

回答

5

我可以编写自定义绑定无提示:

ko.bindingHandlers.truncatedText = { 
    update: function (element, valueAccessor, allBindingsAccessor) { 
     var value = ko.utils.unwrapObservable(valueAccessor()), 
     length = ko.utils.unwrapObservable(allBindingsAccessor().length) || ko.bindingHandlers.truncatedText.defaultLength, 
     truncatedValue = value.length > length ? value.substring(0, Math.min(value.length, length)) + " ..." : value; 

     ko.bindingHandlers.text.update(element, function() { return truncatedValue; }); 
    }, 
    defaultLength: 15 
}; 
8

使用与文本溢出CSS3类:省略号财产

.truncate { 
    width: 140px; 
    white-space: nowrap; 
    overflow: hidden; 
    text-overflow: ellipsis; 
}