Вы также можете зарегистрировать обработчик привязки для MaskMoney с помощью Knockout, например:
$(document).ready(function () {
ko.bindingHandlers.currencyMask = {
init: function (element, valueAccessor, allBindingsAccessor) {
var options = allBindingsAccessor().currencyMaskOptions || {};
$(element).maskMoney(options);
ko.utils.registerEventHandler(element, 'focusout', function () {
var observable = valueAccessor();
var numericVal = parseFloat($(element).val().replace(/[^\.\d]/g, ''));
numericVal = isNaN(numericVal) ? 0 : numericVal;
observable(numericVal);
});
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).unmaskMoney();
});
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
$(element).val(value);
$(element).trigger('focus');
}
};
});
, а затем в качестве привязки:
<input type="text" data-bind="currencyMask: MyModel.TotalCost, currencyMaskOptions: { symbol: '$', showSymbol: true, thousands: ',', precision: 0 }" />
Обратите внимание, что я немного подправил плагин MaskMoney, чтобы использовать input.on('focusout.maskMoney', blurEvent);
вместо input.bind('blur.maskMoney',blurEvent);
, потому что он не вызывал обновление при потере фокуса при щелчке мышью, только при нажатии табуляции.нашел подход обработчика связывания действительно хорошим для плагинов, таких как этот, datepickers и т. д.