Переглянути джерело

[core] Add option to allow empty input for numeric KO extender and binding

(cherry picked from commit eae2765f6b1a976acc2fc8a325cb9f7511d1e8fe)
Johan Ahlen 10 роки тому
батько
коміт
ad6d1c3

+ 8 - 3
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -38,15 +38,20 @@ ko.bindingHandlers.fadeVisible = {
 };
 
 
-ko.extenders.numeric = function (target, precision) {
+ko.extenders.numeric = function (target, config) {
+  var precision = typeof config.precision === 'undefined' ? config : config.precision;
+  var roundingMultiplier = Math.pow(10, precision);
+
   var result = ko.computed({
     read: target,
     write: function (newValue) {
       var current = target(),
-          roundingMultiplier = Math.pow(10, precision),
           newValueAsNum = isNaN(newValue) ? 0 : parseFloat(+newValue),
           valueToWrite = Math.round(newValueAsNum * roundingMultiplier) / roundingMultiplier;
 
+      if (newValue === '' && config.allowEmpty) {
+        valueToWrite = newValue;
+      }
       if (valueToWrite !== current) {
         target(valueToWrite);
       } else {
@@ -63,7 +68,7 @@ ko.extenders.numeric = function (target, precision) {
 ko.bindingHandlers.numericTextInput = {
   init: function (element, valueAccessor, allBindings) {
     var bindingOptions = ko.unwrap(valueAccessor());
-    var numericValue = ko.observable(bindingOptions.value()).extend({ numeric: bindingOptions.precision });
+    var numericValue = ko.observable(bindingOptions.value()).extend({ numeric: { precision: bindingOptions.precision, allowEmpty: typeof bindingOptions.allowEmpty !== 'undefined' && bindingOptions.allowEmpty } });
     numericValue.subscribe(function(newValue) { bindingOptions.value(newValue) });
     ko.bindingHandlers.textInput.init(element, function() { return numericValue }, allBindings);
   }