我想创建一个输入事件的可变长度窗口/缓冲区,它会在收到其他事件时延长。
这是为了实现“当您键入时搜索”功能。我想捕获点击,但为了不给服务器带来压力,我想明智地进行服务调用。
我想到的逻辑是缓冲击键,从第一个键开始,直到键加1秒延迟。因此,如果用户仍在键入(即以<1秒的频率敲击键盘),我们将不会呼叫后侧服务。然而,一旦他们停止输入1秒钟,就会打电话。
答案 0 :(得分:3)
我认为您正在寻找的是Rx的Throttle功能。
在C#和Javascript中完成你想要的东西(即使javascript肯定是你需要的,用c#和rxjs标记的问题):
$(document).ready(function(){
$('#myInput')
.toObservable("keyup")
.Select(function(){ return $('#myInput').val(); })
.Throttle(500)
.Subscribe(function(text){ console.log("fire up ajax call"); });
});
SearchTextChangedObservable = Observable.FromEventPattern<TextChangedEventArgs>(this.textBox, "TextChanged");
_currentSubscription = SearchTextChangedObservable.Throttle(TimeSpan.FromSeconds(.5)).ObserveOnDispatcher().Subscribe(e => this.ListItems.Add(this.textBox.Text));
希望这有帮助。