Node.js侦听动态创建的对象上的事件

时间:2014-03-05 16:00:36

标签: javascript node.js events

我有一个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帮助/建议将不胜感激!

1 个答案:

答案 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。)