用戶在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率。
這兩種解決方案從未同時應用,因此它們不會發生碰撞。
其實我覺得有另外一個變量會讓事情變得更加複雜。但它應該讓事情變得更好。 – MrFox
您需要絕對清楚地區分您所指的是哪個值/縮放比例 - 因此,在編譯器和語言方面,它們是分開的。如果你想做一個面向對象解決方案,你可以通過PercentValue和UnitaryValue屬性來設置一個'PercentValue'類。 –