如何在dart中编写on-*事件/回调注册
How to write on-* event/callback registration in dart
我有一个JavaScript类,其中有一些事件,我需要将其重写为Dart。我不知道如何重写我们使用回调的部分。这是我的示例代码:
var Person = function (name) {
this.name = name;
this.onNameChangedCallbacks = [];
}
Person.prototype.onNameChanged = function(callback) {
this.onNameChangedCallbacks.push(callback);
}
Person.prototype.setName = function (name) {
this.name = name;
this.onNameChangedCallbacks.forEach(function (callback){
callback(name);
});
}
var adam = new Person('Adam');
adam.onNameChanged(function(newName) {
alert('New name is set to: ' + newName);
});
adam.setName('eva');
http://jsfiddle.net/R79Vy/正如你所看到的,当name被改变的时候,所有注册的回调函数都会被调用新的name参数。如何在dart中编写这些代码?由于
如果是自定义事件
elem.on['name-changed'].listen((e) {
// handle event
});
如果是DOM事件,通常有特定的getter,如
elem.onNameChanged.listen((e) {
// handle event
});
// or
elem.onNameChanged.listen((e) => /* handle event (inline function body) */);
你也可以传递一个方法
elem.onNameChanged.listen(nameChangeHandler);
void nameChangeHandler(e) {
// handle event
}
当您想要显式取消订阅(不依赖于垃圾收集)
import 'dart:async';
StreamSubscription nameChangeSubscr;
nameChangeSubscr = elem.onnameChanged.listen((e) => /* handle event */);
// unsubscribe
if(nameChangeSubscr != null) nameChangeSubscr.cancel();
如果你想要像DOM事件那样的自定义事件的getter我如何从聚合物Dart发射自定义事件?
更新也许这就是你想要的
import 'dart:async';
class Person {
Stream onNameChange;
//StreamController _controller = new StreamController();
StreamController _controller = new StreamController.broadcast();
Person() {
onNameChange = _controller.stream;
}
String _name;
String get name => _name;
set name(String val) {
_name = val;
_controller.add(val);
}
}
void main() {
var p = new Person();
StreamSubscriptions nameChangeSubscr = p.onNameChange.listen((e) => print('name changed: $e'));
var i = 0;
new Timer.periodic(new Duration(milliseconds: 300), (Timer t) {
if(i > 5) {
t.cancel();
if(nameChangeSubscr != 0) nameChangeSubscr.cancel();
}
p.name = "name ${i++}";
});
}
相关文章:
- Javascript点击事件回调不起作用
- Facebook转换事件回调
- 页面上的所有推特推文都呈现了事件/回调
- 检测事件回调的开始和结束
- 使用qunit.js查询事件回调测试
- Babel中的d3事件回调上下文更改
- socket.io事件回调中模型更改时角度视图未更新
- 从事件回调中引用包含主干视图
- 就地休息 gem 成功事件回调
- 如何在 JavaScript 中编写高效的事件回调方法
- jQuery 事件回调速度:匿名与命名函数
- 事件回调在 Mozilla Firefox 中未触发
- 在事件回调中获取对模型的引用
- 在 Backbone 中.js事件回调这是什么,以及如何访问触发的元素
- 什么是.js完整的事件回调
- 将参数传递给项视图中的事件回调
- 多态函数作为事件回调
- 这真的是从事件回调中获取 Rx.Observable 的最佳方式吗?
- GTM数据层事件回调函数
- 管理“;这个“;在事件/回调驱动的JavaScript应用程序中