【问题标题】:RxDom: not working when new id createdRxDom:创建新 id 时不工作
【发布时间】:2017-02-20 01:57:39
【问题描述】:

我正在使用Reactive Extension DOM 来监听来自 DOM 的事件。这是我的示例代码:

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');
        });

document.ready 完成时,当test_id 在页面上时,此代码有效。但是我正在使用 AJAX 请求,所以 test_id 只是在客户端发送和接收 ajax 请求的时间之后出现。如何让 RxDom 通知这一点。

谢谢。

【问题讨论】:

    标签: javascript ajax rxjs rxjs-dom


    【解决方案1】:

    你需要再次创建 Observable。

    当您调用 document.getElementById('test_id'); 并且 ID 为 test_id 的元素不存在时,它返回 null。因此无法“刷新”source Observable,因为它甚至不知道应该“刷新”哪个 DOM 元素。

    因此,唯一的方法是在从 Ajax 调用中附加 HTML 之后创建 Observable。

    【讨论】:

    • 哇。谢谢你让我知道这件事。另一个问题是:我怎样才能让其他元素订阅这个来源。谢谢
    • @TrầnKimDự 这只是一个 Observable,您可以像订阅任何其他 Observable 一样订阅它。顺便说一句,“元素订阅”是什么意思? DOM 元素不能订阅任何东西。
    • 我的意思是:例如。我有一个input a。当输入更改时,名为 b 和 c 的两个元素将知道并“做某事”。如上面的代码,我必须手动执行:从 a 接收更改信号时,我必须在同一函数上运行 do_something。我想撤消操作。
    • 您将按照与现在完全相同的方式进行操作。输入a 将在每次更改时更新bc。输入的bc不能自动更新更新,必须有人触发更新a
    • 感谢您告诉我。所以 RxJS 不支持递归观察者。这意味着:如果 a 依赖于 b。 b 取决于 c。所以当改变 a 不会改变 c ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多