Jeśli chcesz obciąć wartości dla numeryczny i nPrzenieś można użyć i przedłużacz że obetnie wartości jak poniżej:
ko.extenders.truncateValue = function(target, option) {
target.subscribe(function (newValue) {
if(newValue.length > option){
target(newValue.substring(0,option));
}
});
return target;
};
a następnie utworzyć zwyczaj wiążącego, który woli dołączy przedłużacz do zaobserwowania:
ko.bindingHandlers.maxLength = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
'use strict';
var maxlength = element.getAttribute("maxlength");
valueAccessor().extend({truncateValue: maxlength })
ko.bindingHandlers.value.init(element, valueAccessor, allBindingsAccessor, viewModel);
}
};
Na html zastosowanie MaxLength wiążące się następująco:
<input type="number" data-bind="maxLength: yourObservable" maxlength="9"></input>
Podobało mi się to rozwiązanie; Chciałbym tylko zasugerować umieszczenie niepoprawnego tekstu w tytule elementu, aby zapewnić szybki podgląd oryginalnej wartości; coś w stylu "element.title = untrimmedText;" jeśli untrimmedText length jest dłuższy niż maxLength. – CaNNaDaRk
Tylko jeden mały komentarz - dobrze byłoby sprawdzić, czy długość nietekstu jest większa niż (trimTextLenth + 3), ponieważ jeśli trimTextLenth ma wartość 5, ale tekst to "123456", wynikiem będzie "12345 ...", co jest dłuższy niż wersja niezwiązana. –
Użyłem odpowiedzi Josepha i komentarza Iwana w tym skrzypcach: http: //jsfiddle.net/8ypdX/90/. Tworzy to zmienną o nazwie truncateText, która pozwala zdefiniować tekst używany do obcięcia i mierzy długość tej zmiennej. Jeśli przycięty tekst plus tekst skracany jest większy niż oryginalny ciąg, to nie wykonuje przycięcia. – RussAwesome