فهرست منبع

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

(cherry picked from commit eae2765f6b1a976acc2fc8a325cb9f7511d1e8fe)
Johan Ahlen 10 سال پیش
والد
کامیت
ad6d1c3
1فایلهای تغییر یافته به همراه8 افزوده شده و 3 حذف شده
  1. 8 3
      desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

+ 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);
   }