2012-03-13 3 views
0

일부 이벤트에 대한 모든 이벤트 처리기가 완료되면 일부 작업을 수행하려고합니다. ,백본에서 모든 이벤트 처리기를 대기하는 방법은 무엇입니까?

handler = function(lock){ 
    lock.handlers --; 
    if (lock.handlers == 0){ 
    lock.callback(); 
    } 
} 

(분명 그 락 객체의 책임 것 :

self.trigger("my_event", {handlers: x, callback: function}); 

그리고 내가 좋아하는 뭔가를 써서 핸들러에서

가 :

내 생각은 이벤트의 개체를 전달할 수 있었다 하지만 당신은 아이디어를 볼 수 있습니다)

하지만 이벤트에 등록 된 핸들러의 숫자 (내 예에서는 x)에 대한 정보를 얻는 방법을 모르겠습니다. 이것이 가능한가? 이것을 할 다른 방법이 있습니까?

+1

또한 jQuery를 사용하는 경우 Deferred 객체의 기능을 사용할 수 있습니다. http://api.jquery.com/category/deferred-object/ & http://www.erichynds.com/jquery/ using-deferreds-in-jquery /, 특히'jQuery.when()'함수 : http://api.jquery.com/jQuery.when/ – biziclop

답변

1

등록 된 핸들러는 모두 "트리거"기능 자체로 호출됩니다. 그래서 그 호출이 돌아 오면, 각각의 핸들러도 가지고 있습니다. 다음 예제를 고려하십시오.

function checkTriggers() { 
    var o = {}; 
    _.extend(o, Backbone.Events); 
    o.on('foo', function(){console.log('ONE');}); 
    o.on('foo', function(){console.log('TWO');}); 
    o.trigger('foo'); 
    console.log('THREE'); 
} 

로그 시퀀스는 항상 1, 2, 3입니다. 따라서 "트리거"를 호출 한 후 작업을 수행 할 수있는 것처럼 보입니다. 그러나 어떤 콜백 함수가 지연을 사용하면 (예 : "setTimeout"과 함께) 다른 문제가 발생합니다.

관련 문제