如何通过输入或从其他输入计算来设置计算的可观察量?

时间:2012-02-06 21:40:09

标签: javascript knockout.js

我有以下代码:

    function ViewModel() {
        var self = this;
        self.deckareax = ko.observable(0);
        self.deckareay = ko.observable(0);
        self.calculatedarea = ko.observable(20);
        self.deckareax.subscribe(function () {
            if (self.deckareax() == 0 || deckareay == 0) {
                self.calculatedarea(0);
            } else {
                self.calculatedarea(self.deckareax() * self.deckareay());
            }
        }
        );
        self.deckareay.subscribe(function () {
            console.log("deckareay " + self.deckareay())

            if (self.deckareax() == 0 || self.deckareay() == 0) {
                self.calculatedarea(0);
            } else {
                self.calculatedarea(self.deckareax() * self.deckareay());
            }

        }
        );
        self.deckareamxm = ko.computed({
            read: function () {
                return self.calculatedarea();
            },
            write: function (value) {
                self.calculatedarea(value);
                if ((self.deckareax() * self.deckareay(0)) != value) {
                    self.deckareax(0);
                    self.deckareay(0);
                }

            },
                owner:self
        });
    }

    ;

    ko.applyBindings(new ViewModel());

我希望能够通过输入deckareax * deckareay手动输入或计算来设置总面积(deckareamxm)。如果我输入结果并且(deckareax * deckareay)不等于总甲板面积x和y应该被清除。

这几乎可行,但是如果我输入总面积,它会清除两者,但也会自行清除。如果我然后再次输入它的总面积。我认为它可能变得复杂。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

This jsfiddle似乎做你想做的事。还有一些其他错误,但我主要通过将self.calculatedarea(value);移动到写入函数的底部来解决问题。