是否有一种方法来实现主/从类型依赖的可观察对象在Knockout JS

Is there a way to achieve master/slave type dependent observables in Knockout JS

本文关键字:依赖 类型 观察 JS Knockout 对象 一种 实现 方法 是否      更新时间:2023-09-26

我的模型中有2个字段具有主/从类型关系。

如果主服务器更新了,从服务器也应该更新。

如果从服务器更新,则主服务器不受影响。

我已经设法实现这与手动订阅- http://jsfiddle.net/ProggerPete/XNUPj/

但是我想知道我是否可以在没有手动绑定的情况下获得相同的结果。我想要它的原因是我不想在销毁视图时取消手动订阅。

欢呼,彼得。

一般来说,我认为手动订阅是解决您的问题最直接的方法。

然而,创建你自己的自定义观察对象是很容易的,它封装了这个功能,并在一个可写的dependentObservable中处理主和从的更新。它可能看起来像这样:

function customObservable(initialValue) {
    var _source = ko.observable(initialValue),
        _local = ko.observable(initialValue),
        result = ko.dependentObservable({
            read: _source,
            write: function(newValue) {
               _source(newValue);
               _local(newValue); 
            }
        });
    result.local = _local;
    return result;
}

,你可以这样使用:

var viewModel = {
    source: customObservable("sourceValue")
};

customObservable(你想叫它什么都行)返回一个可写的dependentObservable,它将更新你可以绑定的两个值作为source。本地值也显示为source.local

因此,您将在您的场景中使用它,例如:http://jsfiddle.net/rniemeyer/67pDS/

我不确定你想如何使用这个功能。如果你正在寻找接受/取消对一个可观察对象的编辑的能力,那么你可能会想看看这个自定义的可观察对象。

显示自定义绑定处理的代码片段:

        var subscription = oComboBoxModel.value.subscribe(updateBestMatchFromValue, oComboBoxModel);
        //handle disposal (if ko.cleanNode is called on the element)
        ko.utils.domNodeDisposal.addDisposeCallback(element, function(){
              subscription.dispose();
        });