2 回答

TA貢獻1895條經驗 獲得超3個贊
在 KO 3.4.0+ 中,您可以在計算上使用延遲更新,該計算依賴于兩者start,并且end以一種導致更改的方式,即使start并且end以互補方式更改:
let eitherX = 1;
const either = ko.computed(() => {
start();
end();
return ++eitherX;
});
either.extend({deferred: true});
現場示例:
顯示代碼片段
在早期版本中,您可以使用以下速率限制:0
let eitherX = 1;
const either = ko.computed(() => {
start();
end();
return ++eitherX;
});
either.extend({rateLimit: 0});
現場示例:
const start = ko.observable(10);
const end = ko.observable(20);
let eitherX = 1;
const either = ko.computed(() => {
start();
end();
return ++eitherX;
});
either.extend({rateLimit: 0});
console.log("Subscribing");
// Applying the rate limit
either.subscribe(() => console.log("notified"));
console.log("changing start");
start(11);
console.log("changing end");
end(19);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
您需要eitherX使either重新計算時的值始終不同。如果你試圖用eitherandstart來定義end(例如start() + end()),如果你改變了startandend以互補的方式(加一start和減一end),either' 的值不會改變,你也不會收到任何通知。

TA貢獻1799條經驗 獲得超9個贊
當您以編程方式同時更改兩個過濾器并且只希望觸發一次回調時,上面的 Crowder 是正確的,當您等待用戶一個接一個地更改過濾器時,這是另一回事。
在更改開始時間之后,真的無法知道用戶是否會更改結束時間,那么您如何知道等待開始時間觸發器最終觸發的時間?
唯一的選擇是在 2 個輸入過濾器之后添加一個按鈕,上面寫著“確認過濾器”并觸發回調。
實際上,還有另一種方法,但涉及有效地執行兩次回調,其中第一次在第二次觸發時被取消,這可能是您希望避免的事情,對吧?
添加回答
舉報