我认为RxJS应该非常适合2秒钟内禁止双击按钮。但是,我正在努力执行。
var $button = $('#myButton').button();
$button
.toObservable("click")
//.Throttle(2000) // Wouldn't fire the first event instantly :-(
.Subscribe(function(){ alert('clicked'); });
为了方便起见,我已经创建了一个jsFiddle。您需要在此 fiddle 中向下滚动,因为我将Rx粘贴到了里面,因为找不到CDN。
http://jsfiddle.net/cburgdorf/mUMFA/2/
最佳答案
我将Sergeys的答案转换为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'); });
关于system.reactive - 如何在2秒钟内第一次发生然后发生压制事件(RxJS),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5197032/