响应式框架中的滑动窗口/缓冲区

4
我想创建一个可变长度的窗口/缓冲区,用于存储输入事件,并随着接收到的其他事件而延长。
这是为了实现“搜索即输入”功能。我想捕获点击,但为了不过度使用服务器,我想明智地进行服务调用。
我的想法是缓冲按键从第一个按下开始,直到抬起按键并延迟1秒。所以如果用户仍在输入(即按键频率小于1秒),我们将不会调用后台服务。然而,一旦他们停止输入1秒钟,就会发出调用。
1个回答

3

我认为你想要的是 Rx 中的 Throttle 功能。

要在 C# 和 Javascript 中实现你想要的功能(即使 JavaScript 明显是你需要的,问题被标记为 c# 和 rxjs):

Rxjs 中,你会发现一个很棒的教程,在这里

$(document).ready(function(){
    $('#myInput')
        .toObservable("keyup")
        .Select(function(){ return $('#myInput').val(); })
        .Throttle(500)
        .Subscribe(function(text){ console.log("fire up ajax call"); });
});

Rx.Net 中,你会发现这里有一个有趣的示例:here
SearchTextChangedObservable = Observable.FromEventPattern<TextChangedEventArgs>(this.textBox, "TextChanged");
_currentSubscription = SearchTextChangedObservable.Throttle(TimeSpan.FromSeconds(.5)).ObserveOnDispatcher().Subscribe(e => this.ListItems.Add(this.textBox.Text));

希望这有所帮助。

太好了,非常感谢!!! :D 我还在想各种实现方法以备不时之需,所以你帮我省了很多事。 - Alwyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接