У меня есть определенный нокаут наблюдаемый, который используется во многих вычислительных функциях, и он работает точно так, как предполагается. Однако по одной из этих вычисляемых функций я НЕ хочу, чтобы она срабатывала при обновлении наблюдаемого. Код мудрое это будет выглядеть примерно так:Как обновить наблюдаемое в вычисляемом без запуска вычисляемого?
self.obs1 = ko.observable(foo);
self.obs2 = ko.observable(bar);
//I want this computed to behave normally
this.comp1 = ko.computed(function() {
return self.obs1() + self.obs2();
}, this);
//I want this computed to trigger on obs1 update but ignore updates to obs2
this.comp2 = ko.computed(function() {
return self.obs1() + self.obs2();
}, self);
setTimeout(function() {
self.obs1(20);
self.obs2(15);
}, 1000);
https://jsfiddle.net/r73yLk5u/
Обратите внимание, что я по-прежнему должен быть в состоянии получить доступ к текущему значению obs2 когда comp2 исполняется я просто не хочу, обновление obs2 в trigger comp2, чтобы иметь новое значение.
Возможно ли это?
Тьфу, я не знаю, если это возможно, но это, вероятно, с каким-то пользовательским удлинителем или что-то. Я думаю, что это признак того, что что-то не так, и прежде чем вы это сделаете, пересмотрите _why_ вы хотите этого и если вы не пытаетесь решить проблему [XY] (http: // meta .stackexchange.com/вопросы/66377/что-это-The-ху-проблема). – vlaz
Спасибо @vlaz. Вероятно, вы правы, я просто не хотел слишком увязываться с контекстом. Короче говоря, это в основном то, что мой пользовательский интерфейс освежает слишком много, но я не могу просто использовать rateLimit, так как я хочу видеть обновления «obs1» почти сразу, но «obs2», который очень часто обновляется, мне никогда неинтересно. – Nathan
Вы рассматривали использование '.extend ({throttle:/* некоторое разумное значение * /})' на втором наблюдаемом, тогда? – vlaz