首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用.extend时获得潜在的可观测值?

如何在使用.extend时获得潜在的可观测值?
EN

Stack Overflow用户
提问于 2019-05-02 08:40:30
回答 1查看 49关注 0票数 1

我在mm中有一个可观察到的长度,它可以扩展到允许用户使用英寸(这很好)。问题是我只想在服务器上使用mm来计算,但是当我读取变量时,我得到了为用户显示的值。

是否有一种简单的方法可以获得潜在的可观测值并避免.extend函数?

编辑:--在我的例子中,我通过添加一个新函数(TypeScript用户:注意并使用一个以转换因子为参数的ko.subscribable.fn界面(参见下面),并将其计算回来)来解决这个问题。因此,我可以调用observable.getMetric(factor)并接收值。

增编,因为它花了我一些时间:在TypeScript中,在添加函数之前,需要像这样的接口:

代码语言:javascript
复制
interface KnockoutSubscribableFunctions<T> {
    getMetricValue(divisor): number;
}
EN

回答 1

Stack Overflow用户

发布于 2019-05-04 09:04:57

不,没有。你最好的选择是使用计算机显示长度,不管是毫米还是英寸,取决于用户的选择,并且总是以毫米为单位存储长度。

您仍然可以使用扩展程序来创建计算结果。这样,该功能至少是可重用的,并且不必每次手动创建相同的计算变量。

代码语言:javascript
复制
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());

JSFiddle:https://jsfiddle.net/thebluenile/L82qn1fb/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55948640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档