我在mm中有一个可观察到的长度,它可以扩展到允许用户使用英寸(这很好)。问题是我只想在服务器上使用mm来计算,但是当我读取变量时,我得到了为用户显示的值。
是否有一种简单的方法可以获得潜在的可观测值并避免.extend函数?
编辑:--在我的例子中,我通过添加一个新函数(TypeScript用户:注意并使用一个以转换因子为参数的ko.subscribable.fn界面(参见下面),并将其计算回来)来解决这个问题。因此,我可以调用observable.getMetric(factor)并接收值。
增编,因为它花了我一些时间:在TypeScript中,在添加函数之前,需要像这样的接口:
interface KnockoutSubscribableFunctions<T> {
getMetricValue(divisor): number;
}发布于 2019-05-04 09:04:57
不,没有。你最好的选择是使用计算机显示长度,不管是毫米还是英寸,取决于用户的选择,并且总是以毫米为单位存储长度。
您仍然可以使用扩展程序来创建计算结果。这样,该功能至少是可重用的,并且不必每次手动创建相同的计算变量。
ko.extenders.unit = function(target, option) {
return ko.pureComputed({
read: function () {
if (option.unit() === 'mm') {
return option.target();
} else {
return parseFloat(option.target() * 0.039).toFixed(2);
}
},
write: function(newVal) {
if (option.unit() == 'mm') {
option.target(newVal);
} else {
option.target(parseFloat(newVal * 25.4).toFixed(2));
}
}
});
}
function ViewModel() {
var vm = this;
vm.lengthMM = ko.observable(10);
vm.unit = ko.observable('mm');
vm.displayLength = ko.observable().extend({ unit: { target: vm.lengthMM, unit: vm.unit } });
}
ko.applyBindings(new ViewModel());https://stackoverflow.com/questions/55948640
复制相似问题