【问题标题】:knockout 2 fields binding each other淘汰赛2场相互绑定
【发布时间】:2013-04-24 01:16:18
【问题描述】:

这是我尝试谷歌答案后的第一篇文章。如果在此之前已在某个地方回答了此问题,那么如果您能帮助将我引导到正确的地方,那就太好了。

我正在想办法在 2 个字段之间进行 2 路绑定。

我的表单上有 2 个字段用于计算重量。 如果您在第 1 字段中输入以磅为单位的重量,那么 Knockout 将在第 2 字段中计算以千克为单位的重量。我对这个没有问题,这是我的 jsfiddle http://jsfiddle.net/ubiquitous_tom/tVh3g/

var weight = 180;
self.weight = ko.observable(weight.toFixed(2));
self.weightKG = ko.computed(function(){
    var kg_weight = parseFloat(self.weight())/2.2;
    return !isNaN(kg_weight) ? kg_weight.toFixed(2) : undefined;
});

现在我遇到的问题是,当我尝试将千克重量放入字段 #2 时。它应该以磅为单位计算到字段#1 中的重量,但它没有这样做。 我不知道如何使它工作,因为我尝试在两个字段上使用计算的“读取”和“写入”的所有代码都会给我带来无限循环错误,所以我认为我只是没有做正确的事情。

如果有人可以帮助我,那就太好了。我确信这是非常简单的事情,但我对 Knockout 完全陌生,我不太确定如何让它正常工作。 这是我正在尝试使用的 jsfiddle http://jsfiddle.net/ubiquitous_tom/VmZLZ/

var weight = 180;
self.weight = ko.observable(weight.toFixed(2));
self.weightKG = ko.computed({
    read: function() {
        return parseFloat(self.weight().toFixed(2));
    },
    write: function(newValue) {
        var kg_weight = parseFloat(newValue)/2.2;
        return !isNaN(kg_weight) ? kg_weight.toFixed(2) : undefined;
    }
});

【问题讨论】:

    标签: knockout.js computed-observable


    【解决方案1】:

    这是一个有效的小提琴:http://jsfiddle.net/jearles/VmZLZ/6/

    关键是让可写计算的读取和写入都引用另一个可观察字段。当您读取计算时,它从“主”字段计算,当您写入计算时,它重新计算“主”字段。

    --

    function weightModel() {
        var self = this;
        var weight = 180;
        self.weight = ko.observable(weight.toFixed(2));
        self.weightKG = ko.computed({
            read: function() {
                return !isNaN(self.weight()) ? 
                   (self.weight() / 2.2).toFixed(2) : undefined;
            },
            write: function(newValue) {
                var pd_weight = !isNaN(newValue) ?
                       (parseFloat(newValue) * 2.2).toFixed(2) : undefined;
                self.weight(pd_weight);
            }
        });
    }
    ko.applyBindings(new weightModel());
    

    【讨论】:

    • 非常感谢!这完美无缺。我不知道为什么我从来没有想过这个。我想我只是假设“阅读”只是为了显示某种东西。
    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 2013-10-31
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多