我使用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.
答案 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" );