RxDom:更改输入时更新div递归的内容

时间:2016-10-13 08:16:47

标签: javascript rxjs rxjs-dom

我使用Reactive Extension DOM来监听来自DOM的侦听事件。目前我遇到一个问题:我有输入A和div B和div C.改变输入A将影响B,改变B的内容将改变div C的内容。因此,它意味着:如果我改变输入A,div B和div C将自动更改。

目前我遇到了问题:当输入A被更改时,输入B已成功更改但不是C.我不知道因为RxDom不支持更改递归或因为div没有更改事件。这是我的简短代码:

var input = document.getElementById('test_id');
    var source = Rx.DOM.change(input);
    var subscription = source.subscribe(
            function (x) {
              console.log(x);
            },
            function (err) {
              console.log('Error: ' + err);
            },
            function () {
              console.log('Completed');
            });

显然我可以听取输入A的事件,然后改变C,但这不是我想要的方式,它看起来像一个变通方法版本。因为业务,div C依赖于div B而不是输入A.

1 个答案:

答案 0 :(得分:2)

Rx将订阅输入的change事件。 change事件仅在实际用户输入时触发,但您的值会以编程方式更改。

你的问题是:你自己输入A,A的change是触发器 - >将运行A上的订阅 - > B以编程方式更改 - > change不会触发B - > B上的订阅将无法运行:)

因此,解决方法是:当您更改B的值时,再次手动触发change事件。您还应该注意,您必须在纯JavaScript上执行此操作,而不是在jquery上执行此操作。这是一个示例代码:

var event = new Event('change');
div_b_element.dispatchEvent(event);

下面的代码不起作用。因为RxJS仅订阅javascript本机事件,而不订阅jquery事件。请小心,因为这将花费您很长时间进行调试。

$(div_b_element).trigger( "change" );