2013-07-10 43 views
0

用戶在0-100範圍內輸入百分比值,它們用作正常百分比。如何顯示與用於計算的值不同的值

但是,當這些值用於計算時,它們需要在0-1範圍內,除以100,因此它們可以直接用於計算。

我用Math.round(value * 100)/10000除以100,所以數字將四捨五入爲2位數。

一個解決方案使用數據綁定:

ko.bindingHandlers.percent = { 
    init: function (element, valueAccessor) { 
     $(element).change(function() { 
      DEBUG && log('Percent changed: ' + $(this).number() + ' saved as: ' + $(this).number()/100); 
      valueAccessor()(Math.round($(this).number({ round: false }) * 100)/10000); 
     }); 
    }, 
    update: function (element, valueAccessor) { 
     var value = ko.utils.unwrapObservable(valueAccessor()); 
     DEBUG && log('Percent changed: ' + value + ' displayed as: ' + value * 100); 
     $(element).val(Math.round(value * 10000)/100); 
    } 
}; 

但是這導致值顯示次什麼樣的用戶將在

100所以它看起來像由100分是不會發生。

bindinghandler正在通過databind="percent施加:Property".

另一種解決方案使用一個額外的增量劑:

obj.Property.extend({ AdvancedCalculation: null, Percent: null }); // Already tried flipping the order of these extenders. 

ko.extenders.Percent = function (target) { 
    var result = ko.computed({ 
     read: function() { 
      DEBUG && log('Value in model: ' + target()); 
      return Math.round(target() * 10000)/100; // Show 
     }, 
     write: function (value) { 
      DEBUG && log('Save user input: ' + value); 
      return Math.round(value * 100)/10000; // To database 
     } 
    }); 

    return result; 
} 

ko.extenders.AdvancedCalculation = function (target) { 
    target.subscribe(function (value) { 
     DEBUG && log('Value in model ' + value); 
     // calculate some other stuff. 
    }); 

    return target; 
}; 

但高級計算的東西是沒有得到由100值劃分的。

此外,我的控制器(保存數據)獲取用戶在瀏覽器中輸入的值,而不是除以100的值。

此外,用戶應該能夠同時使用和。以指示點號

(例如:5.4% or 5,4%)。

這將用於輸入intrest率。

這兩種解決方案從未同時應用,因此它們不會發生碰撞。

回答

1

本質上,你試圖爲這個屬性設置兩個不同的值。而且,您似乎沒有明確的區分您實際期望獲得哪一個的方式。

嘗試做簡單的東西,所以它的工作原理。

  • 有百分比一個屬性,該屬性被持久和第二屬性
  • 集(只讀)在單位值。

在某些情況下調用這些屬性RatePercentRateUnitary。你也可能發現有一個RateMultiplier或其他,比如1.00 + RateUnitary。

+0

其實我覺得有另外一個變量會讓事情變得更加複雜。但它應該讓事情變得更好。 – MrFox

+0

您需要絕對清楚地區分您所指的是哪個值/縮放比例 - 因此,在編譯器和語言方面,它們是分開的。如果你想做一個面向對象解決方案,你可以通過PercentValue和UnitaryValue屬性來設置一個'PercentValue'類。 –