Javascript 有没有一种方法可以在淘汰JS中实现主/从类型相关的观测值
我的模型中有两个字段具有主/从类型的关系 如果主设备更新,则从设备也应进行更新 如果从机更新,则主机不受影响 我已经通过手动订阅实现了这一点- 但是我想知道,如果没有手动绑定,我是否可以达到同样的效果。我想要它的原因是,当我破坏我的视图时,我不希望必须解除手动订阅的绑定 干杯,Javascript 有没有一种方法可以在淘汰JS中实现主/从类型相关的观测值,javascript,knockout.js,Javascript,Knockout.js,我的模型中有两个字段具有主/从类型的关系 如果主设备更新,则从设备也应进行更新 如果从机更新,则主机不受影响 我已经通过手动订阅实现了这一点- 但是我想知道,如果没有手动绑定,我是否可以达到同样的效果。我想要它的原因是,当我破坏我的视图时,我不希望必须解除手动订阅的绑定 干杯, Peter一般来说,我认为手动订阅是解决您问题的最直接方法 但是,创建您自己的自定义observable非常容易,它封装了此功能,并在可写的DependentoServable中处理主设备和从设备的更新。它可能看起来像这
Peter一般来说,我认为手动订阅是解决您问题的最直接方法 但是,创建您自己的自定义observable非常容易,它封装了此功能,并在可写的DependentoServable中处理主设备和从设备的更新。它可能看起来像这样:
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.local
因此,您可以在场景中使用此选项,如:
但我不确定您想如何使用此功能。如果您希望能够接受/取消对可观察对象的编辑,那么您可能希望查看自定义可观察对象
要在自定义绑定中显示处置的代码段:
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();
});
一般来说,我认为手动订阅是解决您的问题的最直接的方法
但是,创建您自己的自定义observable非常容易,它封装了此功能,并在可写的DependentoServable中处理主设备和从设备的更新。它可能看起来像这样:
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.local
因此,您可以在场景中使用此选项,如:
但我不确定您想如何使用此功能。如果您希望能够接受/取消对可观察对象的编辑,那么您可能希望查看自定义可观察对象
要在自定义绑定中显示处置的代码段:
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();
});
谢谢你的意见。在我的场景中,我无法修改原始视图模型以将可观察对象更改为自定义可观察对象。我正在开发一个组合框绑定,我希望原始视图模型需要一些技巧。我试图避免手动绑定的具体原因是,如果我手动订阅,在调用cleanNodes后,父视图模型将保留对combobox模型的引用。尽管,仔细考虑一下,这可能也会成为依赖观测值的问题……您可以使用:ko.utils.domNodeDisposal.addDisposeCallback
在主元素上调用cleanNode时添加回调以处理订阅。在答案中添加了一个代码片段,以显示它对您的外观。感谢您的输入。在我的场景中,我无法修改原始视图模型以将可观察对象更改为自定义可观察对象。我正在开发一个组合框绑定,我希望原始视图模型需要一些技巧。我试图避免手动绑定的具体原因是,如果我手动订阅,在调用cleanNodes后,父视图模型将保留对combobox模型的引用。尽管,仔细考虑一下,这可能也会成为依赖观测值的问题……您可以使用:ko.utils.domNodeDisposal.addDisposeCallback
在主元素上调用cleanNode时添加回调以处理订阅。在答案中添加了一个代码片段,以显示它对您的外观。