【发布时间】: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
假设我有一个自定义元素,它的dart文件中有@observable Map model = toObservable({'k': 'v'});,html文件中有<span>{{model['k']}}</span>,当我更改model时,我怎么知道,不使用MutationObserver来观察DOM ,新值是否应用于 DOM?
【问题讨论】:
标签: dart dart-polymer
您必须在地图上使用 toObservable(),否则不会插入新值。
为什么需要知道 DOM 中的新值何时更新?如果你真的需要,可以收听ObservableMap的changes。
【讨论】:
changes 提供了ChangeRecord,这是关于地图本身,而不是关于更改是否已应用于 DOM。无论如何谢谢:)
您可以收听model.changes,但这也是 Polymer 所做的。要在 Polymer 将元素添加到 DOM 之后执行您的代码,您可以延迟您的代码,例如
model.changes.listen((changes) {
new Future(() => doSomethingAfterDomUpdate());
});
这样您就可以给 Polymer 时间来完成其更新。
【讨论】:
new Future(() => ...) 延迟您的代码,那么您知道 Polymer 已经更新了 DOM。 Polymer 本身以相同的方式收到有关更改的通知,但会立即更新 DOM。如果您使用Future(() => ...) 延迟您的代码,您的代码将在稍后的循环中执行。