knockout.js Knockout -两个可观测场相互更新

wbrvyc0a  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(140)

我在表单上有两个字段;“天数”和“日期”。

<div id="myForm">
    <label for="days">Days</label>
    <input id="days" type="text" data-bind="value:myViewModel.days" />

    <label for="date">Date</label>
    <input id="date" type="text" data-bind="value:myViewModel.date" />
</div>

每个字段都绑定到一个KO可观察对象。我希望用户能够编辑这些字段中的任何一个,而另一个字段将自动更新。
My ViewModel如下所示(简化以保持简洁):

myViewModel = new function () {
    var self = this;
    self.days = ko.observable(10);
    self.date = ko.observable('2020-02-06');
};

myViewModel.days.subscribe(function (newValue) {
    var newDate = JSON call to get new date using newValue
    myViewModel.date(newDate);
});

myViewModel.date.subscribe(function (newValue) {
    var newDays = JSON call to get days using newValue
    myViewModel.days(newDays);
});

我遇到的问题是因为两个值都是可观察的,并且每个值都会更新另一个值,一旦其中一个值被自动更新,它就会触发另一个更新循环。有没有其他方法来获得我想要的行为?
提前感谢。

gg0vcinb

gg0vcinb1#

一种方法是将UI绑定到可写的计算对象,而不是直接绑定到可观察对象。UI更新被发送到计算对象,而计算对象指示哪些底层的可观察对象被更新,而不触发任何进一步的(模型)更新。
第一个

相关问题