Javascript 如何在dart中写入-*事件/回调注册

Javascript 如何在dart中写入-*事件/回调注册,javascript,events,dart,Javascript,Events,Dart,我有一个JavaScript类,它包含一些事件,我需要将其重写为Dart。我不知道如何重写我们使用回调的部分。这是我的示例代码: var Person = function (name) { this.name = name; this.onNameChangedCallbacks = []; } Person.prototype.onNameChanged = function(callback) { this.onNameChangedCallbacks.push(callba

我有一个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');


正如您所看到的,当名称更改时,所有已注册的回调都会使用新的名称参数调用。如何在dart中编写此代码?如果是定制活动,谢谢

elem.on['name-changed'].收听((e){
//处理事件
});
如果是DOM事件,通常会有特定的getter,如

elem.onNameChanged.listen((e){
//处理事件
});
//或
elem.onNameChanged.listen((e)=>/*处理事件(内联函数体)*/);
您还可以传递一个方法

elem.onNameChanged.listen(nameChangeHandler);
无效名称更改处理程序(e){
//处理事件
}
当您想要明确地取消订阅时(不依赖于垃圾收集)

导入'dart:async';
streamsubscr;
nameChangeSubscr=elem.onnameChanged.listen((e)=>/*处理事件*/);
//退订
如果(nameChangeSubscr!=null)nameChangeSubscr.cancel();
如果您想要自定义事件(如DOM事件)的getter

更新 也许这就是你想要的

导入'dart:async';
班主任{
名称变更流;
//StreamController _controller=新的StreamController();
StreamController _controller=新的StreamController.broadcast();
人(){
onNameChange=\u controller.stream;
}
字符串\u名称;
字符串get name=>\u name;
集合名称(字符串值){
_name=val;
_控制器。添加(val);
}
}
void main(){
var p=新人();
StreamSubscriptions nameChangeSubscr=p.onNameChange.listen((e)=>print('name changed:$e');
var i=0;
新定时器。周期性(新持续时间(毫秒:300),(定时器t){
如果(i>5){
t、 取消();
如果(nameChangeSubCr!=0)nameChangeSubCr.cancel();
}
p、 name=“name${i++}”;
});
}

我不明白。我的个人课在哪里?埃伦是什么?我的Person类还没有任何on、onNameChanged方法。我不知道如何实现它们。对不起,我不是很流利的JavaScript,节省了时间彻底调查。我将扩展我的回答您是真的想以这种方式注册回调,还是只需要一个方法来获得有关更改的通知,如图所示,这是可行的,但不是预期的。场景:更改名称,然后订阅,然后再次更改名称=>应该调用回调一次,但实际上它调用了两次。没错,以前的版本缓冲事件,并在侦听器订阅时发送它们。当前版本不再这样做了。