Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
59
rated 0 times [  64] [ 5]  / answers: 1 / hits: 23894  / 11 Years ago, wed, may 1, 2013, 12:00:00

I have an observable name field in my knockout view model.
Now i want to limit the number of characters in this field if it exceeds certain number.



As if name = john smith and i have a limit of 6 characters then

display john s...


More From » html

 Answers
8

Another reusable solution is to create a custom binding that displays a trimmed version of the text.



This allows the underlying value to remain unaffected, but trims the text for display purposes. This would be useful for something like a message preview, or for fitting data into a grid column.



Example binding:



ko.bindingHandlers.trimLengthText = {};
ko.bindingHandlers.trimText = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var trimmedText = ko.computed(function () {
var untrimmedText = ko.utils.unwrapObservable(valueAccessor());
var defaultMaxLength = 20;
var minLength = 5;
var maxLength = ko.utils.unwrapObservable(allBindingsAccessor().trimTextLength) || defaultMaxLength;
if (maxLength < minLength) maxLength = minLength;
var text = untrimmedText.length > maxLength ? untrimmedText.substring(0, maxLength - 1) + '...' : untrimmedText;
return text;
});
ko.applyBindingsToNode(element, {
text: trimmedText
}, viewModel);

return {
controlsDescendantBindings: true
};
}
};


Use it like this:



<div data-bind=trimText: myText1></div>


or...



<div data-bind=trimText: myText1, trimTextLength: 10></div>


See Fiddle


[#78493] Tuesday, April 30, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
kalynnkathrynd

Total Points: 273
Total Questions: 101
Total Answers: 93

Location: Nauru
Member since Thu, Feb 2, 2023
1 Year ago
;