【问题标题】:Polymer Dart: is @observable's new value inserted into DOM?Polymer Dart:@observable 的新值是否插入到 DOM 中?
【发布时间】:2015-03-22 10:54:04
【问题描述】:

假设我有一个自定义元素,它的dart文件中有@observable Map model = toObservable({'k': 'v'});,html文件中有<span>{{model['k']}}</span>,当我更改model时,我怎么知道,不使用MutationObserver来观察DOM ,新值是否应用于 DOM?

【问题讨论】:

    标签: dart dart-polymer


    【解决方案1】:
    1. 您必须在地图上使用 toObservable(),否则不会插入新值。

    2. 为什么需要知道 DOM 中的新值何时更新?如果你真的需要,可以收听ObservableMap的changes。

    【讨论】:

    • 如果我理解正确的话,changes 提供了ChangeRecord,这是关于地图本身,而不是关于更改是否已应用于 DOM。无论如何谢谢:)
    • 没错。但这就是你拥有 Future 解决方案或 MutationObserver 的原因......
    【解决方案2】:

    您可以收听model.changes,但这也是 Polymer 所做的。要在 Polymer 将元素添加到 DOM 之后执行您的代码,您可以延迟您的代码,例如

    model.changes.listen((changes) {
      new Future(() => doSomethingAfterDomUpdate());
    });
    

    这样您就可以给 Polymer 时间来完成其更新。

    【讨论】:

    • 如果您使用 new Future(() => ...) 延迟您的代码,那么您知道 Polymer 已经更新了 DOM。 Polymer 本身以相同的方式收到有关更改的通知,但会立即更新 DOM。如果您使用Future(() => ...) 延迟您的代码,您的代码将在稍后的循环中执行。
    • 不太明白事件是如何传递的,Future 是如何安排的,让我阅读更多,稍后再确认:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    相关资源
    最近更新 更多