Dart 省道可观察变化处理程序

Dart 省道可观察变化处理程序,dart,observer-pattern,Dart,Observer Pattern,我正在寻找一种使用处理函数来响应Dart中可观察集合的更改的方法。我想通过管道将我的更改直接传递到函数 List things = toObservable([]); //... things.onChange.listen((e) => onThingsChanged(e) ); //blows up //... function onThingsChanged(e){ //... } 很明显,没有像onChange这样的东西,那么我在这里找什么呢?我找到的所有示例都只是用HTM

我正在寻找一种使用处理函数来响应Dart中可观察集合的更改的方法。我想通过管道将我的更改直接传递到函数

List things = toObservable([]);
//...
things.onChange.listen((e) => onThingsChanged(e) ); //blows up
//...
function onThingsChanged(e){
   //...
}
很明显,没有像onChange这样的东西,那么我在这里找什么呢?我找到的所有示例都只是用HTML中的
标记观察更改。

有一篇关于的好文章。我认为它仍在建设中,因此dartlang.org网站上还没有链接

回答您问题的部分是:

您可以这样做:

List things=toObservable([]);
观察(()=>事物,改变);
OntingsChanged(变更通知e){
// ...
}

对马可的答案进行了一些补充,这些补充可能并不明显

除了使用表达式的
observeChanges
之外,还可以使用
observeChanges
来获取
observeable
的一个实例,因此您可以编写
observeChanges(things,(c)=>…)


更重要的是,如果在Web UI上下文之外(例如,在独立脚本中)使用
ObservableList
,则不会立即触发更改。相反,更改是排队的,您需要调用
deliverChangesSync
来触发通知。然后,侦听器将收到更改列表的通知。

问题在于,它无法在WebUI上下文中运行。例如,如果您想在库代码中作为常规可观察列表执行此操作,则不会触发处理程序-更改已排队,但不会传递。显式调用
deliverChangesSync()是必需的。谢谢。我想当我读到那个医生的时候,我错过了那个部分。我真的不明白为什么第一个参数必须是()=>东西,而不仅仅是东西。你能解释一下吗?
observe
接受一个函数,该函数返回一个
Observable
实例。还有
observeChanges
,它只需要一个可观测值,这样你就可以调用
observeChanges(things,onthingchanged)
@ZdeslavVojkovic,你为什么不把它作为一个答案呢?它起作用了。我也使用了observe函数,但是第二个参数必须修改:observe(()=>things,(e)=>onthingchanged(e));对我来说,观察变化似乎更干净。