Если вы хотите усечь значение число i Nput вы могли бы использовать и расширитель, который обрезает значение, как в следующем:
ko.extenders.truncateValue = function(target, option) {
target.subscribe(function (newValue) {
if(newValue.length > option){
target(newValue.substring(0,option));
}
});
return target;
};
А затем создать пользовательские привязки этой воли будет добавлять расширитель наблюдаемым:
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);
}
};
На вашем HTML вы претендуете MAXLENGTH связывание следующим образом:
<input type="number" data-bind="maxLength: yourObservable" maxlength="9"></input>
Мне понравилось это решение; Я просто хочу предложить поместить неокрашенный текст в заголовок элемента, чтобы обеспечить быстрый предварительный просмотр исходного значения; что-то вроде «element.title = untrimmedText;» если untrimmedText длина больше, чем maxLength. – CaNNaDaRk
Просто один небольшой комментарий - было бы неплохо проверить, что длина необработанного текста больше (trimTextLenth + 3), потому что если trimTextLenth равно 5, но текст «123456», результатом будет «12345 ...», который длиннее, чем необработанная версия. –
Я использовал ответ Иосифа и комментарий Ивана в этой скрипке: http: //jsfiddle.net/8ypdX/90/. Это создает переменную, называемую truncateText, которая позволяет вам определять текст, используемый для усечения, и измеряет длину этой переменной. Если обрезанный текст плюс текст усечения больше, чем исходная строка, то он не выполняет обрезку. – RussAwesome