我有一个Node.JS应用程序,它从存储在db中的信息动态创建Record对象,Record的每个实例都发出事件,我想全部听取它们。 它是这样的:
db.getRecords(function(group){
for (var i = 0; i < group.length; i++) {
var record = new Record(JSON.parse(group[i].list),group[i].id,group[i].time);
record.setup();
record.on('dropped',function(){
db.deleteRecord(record.id);
});
}
});
上面的代码将始终监听最后一个对象创建的事件...这是有道理的,但我无法弄清楚如何监听我的所有Record对象,并对它们发出的evants作出反应。 Anhy帮助/建议将不胜感激!
答案 0 :(得分:2)
您当前的代码 正在侦听所有记录生成的事件。但是,在所有情况下,将调用db.deleteRecord
,其中包含循环覆盖的最后一条记录的ID。要获取特定实例,第一条记录的事件处理程序将使用最后一条记录的id调用db.deleteRecord
。
要解决这个问题,你可以这样做:
record.on('dropped',function(id){
db.deleteRecord(id);
}.bind(undefined, record.id));
这将强制传递给您的回调的id
设置为record.id
在调用绑定时的的值。 (bind
的第一个参数在匿名函数中将this
设置为undefined
。)