Если вам действительно нужно приостановить подписки, я нашел способ приостановить их в вычисляемых наблюдаемых с помощью pauseableComputed (идея взята из с этого сайта ). Я немного изменил его, чтобы добавить pauseableComputed, возможность иметь функции чтения и записи.
viewModel.myComputedObservable = ko.pauseableComputed(function() {
return myResult;
}, viewModel);
Для приостановки вы вызываете myComputedObservable.pause();
, вносите все свои изменения, а затем вызываете myComputedObservable.resume();
для этих изменений, чтобы активировать подписки в вычисляемой наблюдаемой.
//wrapper for a computed observable that can pause its subscriptions
ko.pauseableComputed = function (evaluatorFunction, evaluatorFunctionTarget) {
var _cachedValue = "";
var _isPaused = ko.observable(false);
//the computed observable that we will return
var result;
if (evaluatorFunction.read) {
result = ko.computed({
read: function() {
if (!_isPaused()) {
//call the actual function that was passed in
return evaluatorFunction.read.call(evaluatorFunctionTarget);
}
return _cachedValue;
},
write: function(value) {
if (!_isPaused()) {
//call the actual function that was passed in
return evaluatorFunction.write.call(evaluatorFunctionTarget, value);
}
return _cachedValue;
}
}, evaluatorFunctionTarget);
} else {
result = ko.computed(function() {
if (!_isPaused()) {
//call the actual function that was passed in
return evaluatorFunction.call(evaluatorFunctionTarget);
}
return _cachedValue;
}, evaluatorFunctionTarget);
}