Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用RxJS创建切换按钮_Javascript_Reactive Programming_Togglebutton_Rxjs - Fatal编程技术网

Javascript 使用RxJS创建切换按钮

Javascript 使用RxJS创建切换按钮,javascript,reactive-programming,togglebutton,rxjs,Javascript,Reactive Programming,Togglebutton,Rxjs,我对反应式编程的概念还很陌生,我只是随便玩玩一下。为了实践我学到的东西,我决定在一个真实的项目中使用RxJS编写一些代码,一切都很顺利 现在我想创建一个简单的切换按钮: let btn = $('button')[0] let clicks = Rx.Observable.fromEvent(btn, 'click') .map(function(clickEvent) { // decide to return true/fal

我对反应式编程的概念还很陌生,我只是随便玩玩一下。为了实践我学到的东西,我决定在一个真实的项目中使用RxJS编写一些代码,一切都很顺利

现在我想创建一个简单的切换按钮:

let btn = $('button')[0]
let clicks = Rx.Observable.fromEvent(btn, 'click')
               .map(function(clickEvent) {
                  // decide to return true/false
               })

clicks.subscribe(value => {
    // value is true or false
})
如果不在我的流中使用DOM方法,我无法理解这个非常简单的练习。事实上,我只需要流中的最新值,然后将其反转(!!值)


如何实现这一点?

您的按钮是否仅通过DOM携带状态?在这种情况下,不查询DOM就无法检索该状态

<>你可以考虑让你的状态退出DOM并在没有DOM函数的情况下操作它。这就是说,您将在某个时候更新DOM状态,但是您可以在observer中进行流外更新

大概是这样的:

var button_initial_state = false; // false for unchecked

var button_state$ = Rx.Observable.fromEvent(btn, 'click')
                                 .scan (function(current_state, event){
                                    return !current_state;
                                  }, button_initial_state)
                                 .startWith(button_initial_state);

button_state$.subscribe (function (state){
  // Code to set the button state in the DOM
})
相关文件:


太好了,谢谢!这就是为什么我想不出来:)。我将看一看扫描。这在RxVision游乐场中给出了一个错误:`TypeError:acculator不是函数`mmhh,然后尝试
.scan(按钮\u初始状态,函数(当前状态,事件){return!当前状态;})
。问题在于,函数的签名因您使用的Rxjs版本而异。在一种情况下,种子是第一个参数,在另一种情况下,种子是最后一个参数。我不知道RxVision正在使用哪个版本,所以请检查两种可能性工具!他们必须使用rxjs2.x。不管怎样,你都可以接受答案。我写了一篇关于这个的博文:。