2014-03-05 4 views
0

DB에 저장된 정보에서 Record 객체를 동적으로 생성하는 Node.JS 응용 프로그램이 있습니다. Record의 각 인스턴스는 이벤트를 발생시키고이를 모두 듣고 싶습니다. 그것은 다음과 같이 진행됩니다Node.js가 동적으로 생성 된 객체의 이벤트를 청취합니다.

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); 
     }); 
    } 
}); 

위의 코드는 항상 의미가 있지만, 내 모든 기록 오브젝트를 듣고하는 방법을 알아낼 수 없습니다 ... 마지막으로 만든 객체에 의해 방출되는 이벤트를 수신합니다, 그들이 방출하는 evants에 반응합니다. Anhy 도움말/제안을 부탁드립니다!

답변

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으로 설정됩니다.

+0

아주 좋습니다! 고마워요! – xShirase

관련 문제