在Polymer中有一个this.job()
函数来处理delayed processing of events。如何从polymer.dart访问此功能?
答案 0 :(得分:1)
@override
void attached() {
super.attached();
dom.window.onMouseMove.listen(mouseMoveHandler);
}
PolymerJob mouseMoveJob;
void mouseMoveHandler(dom.MouseEvent e) {
print('mousemove');
mouseMoveJob = scheduleJob(mouseMoveJob, onDone, new Duration(milliseconds: 500));
}
void onDone() {
print('done');
}
如果作业没有重新安排500毫秒,则执行该作业 在聚合物中,这通常在初始化时使用
xxxChanged(old);
被简单地多次调用,因为xxx
更新了来自其他几个状态的更改,这些状态是一个接一个地初始化但是在上次更新时执行xxxChanged
就足够了(更短的超时)应该使用0-20毫秒,具体取决于xxxChanged
是仅从同步调用还是从异步代码调用。
我使用此模式(但未使用PolymerJob
)的另一种情况是@observable
字段绑定到滑块<input type="range" value='{{slider}}'>
。
当您移动旋钮时,这会在短时间内经常调用sliderChanged(oldVal, newVal)
。更新的执行是昂贵的,并且无法在两个这样的调用之间完成,请参阅http://bwu-dart.github.io/bwu_datagrid/example/e04_model.html作为示例。
如果没有一些延迟执行,这将非常麻烦。
答案 1 :(得分:0)
尝试使用Future
:
doJob() => print('hi');
new Future(doJob).then((_) => print('job is done'));