我认为 RxJS 应该完全适合抑制重复按钮点击 2 秒。然而,我在实施过程中遇到了困难。
var $button = $('#myButton').button();
$button
.toObservable("click")
//.Throttle(2000) // Wouldn't fire the first event instantly :-(
.Subscribe(function(){ alert('clicked'); });
为了您的方便,我已经创建了一个 jsFiddle。你需要在这个小提琴中向下滚动,因为我只是将 Rx 粘贴到里面,因为我找不到 CDN。
http://jsfiddle.net/cburgdorf/mUMFA/2/ http://jsfiddle.net/cburgdorf/mUMFA/2/
我将 Sergey 的答案转换为 JavaScript,并认为这应该是最后的方法。
var $button = $('#myButton').button();
$button
.toObservable("click")
.Take(1)
.Merge(Rx.Observable.Empty().Delay(2000))
.Repeat()
.Subscribe(function(){ console.log('clicked'); }
根据我的理解,这个解决方案实际上更好,因为它不依赖副作用,这使得它在可组合性方面更好。
正如 Sergey 指出的,您甚至可以更进一步,实现您自己的组合器,如下所示:
Rx.Observable.prototype.OneInTime = function(delay){
return this
.Take(1)
.Merge(Rx.Observable.Empty().Delay(delay))
.Repeat();
};
所以我们上面的例子可以简化为:
var $button = $('#myButton').button();
$button
.toObservable("click")
.OneInTime(2000)
.Subscribe(function(){ console.log('clicked'); });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)