Se si desidera troncare il valore per un numerico i nput si potrebbe usare e extender che troncherà il valore simile al seguente:
ko.extenders.truncateValue = function(target, option) {
target.subscribe(function (newValue) {
if(newValue.length > option){
target(newValue.substring(0,option));
}
});
return target;
};
e quindi creare un legame che la volontà personalizzato aggiungerà l'estensione per l'osservabile:
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);
}
};
Sul tuo html si applica vincolante il maxLength come segue:
<input type="number" data-bind="maxLength: yourObservable" maxlength="9"></input>
fonte
2015-11-13 14:24:26
Mi è piaciuta questa soluzione; Vorrei solo suggerire di inserire il testo non modificato nel titolo dell'elemento per fornire un'anteprima veloce del valore originale; qualcosa come "element.title = untrimmedText;" se la lunghezza del testo non tagliata è superiore a maxLength. – CaNNaDaRk
Solo un piccolo commento: sarebbe una buona idea controllare che la lunghezza del testo non programmata sia superiore a (trimTextLenth + 3), perché se trimTextLenth è uguale a 5, ma il testo è "123456", il risultato sarà "12345 ...", che è più lungo della versione non tagliata. –
Ho usato la risposta di Giuseppe e il commento di Ivan su questo violino: http: //jsfiddle.net/8ypdX/90/. Questo crea una variabile chiamata truncateText che consente di definire il testo utilizzato per il troncamento e misura la lunghezza di tale variabile. Se il testo tagliato più il testo del troncamento è più della stringa originale, non esegue il ritaglio. – RussAwesome