2012-08-15 55 views
0

解僱我有兩個按鈕:執行功能後,兩個或多個事件在骨幹

<button id="1">button 1</button> 
<br> 
<button id="2">button 2</button> 

我想打一個警報消息被點擊這兩個按鈕之後纔出現,這是一個更大的一部分應用爲這我使用Backbone.js的,到目前爲止,我有這樣的:

var test = {}; 

_.extend(test, Backbone.Events); //in order to use the backbone events feature 

test.on("hello bye", function(){ 
    alert("works!"); 
}); 

$("#1").click(function() { 
    test.trigger("hello"); 
}); 

$("#2").click(function() { 
    test.trigger("bye"); 
}?); 

這提出每當按下兩個按鈕中的一個消息,但我需要它的工作被點擊這兩個按鈕後,才。有沒有辦法使用Backbone.Events功能或可能使用jQuery來實現這一點?

小提琴:http://jsfiddle.net/ccgRN/

感謝

回答

1

簡約的實施將創造幾個變量來跟蹤已經被解僱了什麼事件。

var helloClicked = false; 
var byeClicked = false; 
var test = {}; 

_.extend(test, Backbone.Events); 

test.on('hello bye'), function() { 
    if (helloClicked && byeClicked) { 
    alert('works!'); 
    } 
}); 

$('#1').click(function() { 
    helloClicked = true; 
    test.trigger('hello'); 
}); 

$('#2').click(function() { 
    byeClicked = true; 
    test.trigger('bye'); 
}); 
2

下面是使用承諾一個想法:http://jsfiddle.net/LFJGL/1/

編輯:固定的舊版本瀏覽器:

var test = {}; 
var promises = []; 
_.extend(test, Backbone.Events); //in order to use the backbone events feature 

function GetAPromise() { 
    var p = $.Deferred(); 
    promises.push(p); 
    return p; 
} 

var events = "hello bye".split(" "); 
_.each(events,function(event) { 
    var p = GetAPromise(); 
    test.on(event, function() { 
     p.resolveWith(event); 
    }); 
}); 

$("#1").click(function() { 
    test.trigger("hello"); 
}); 

$("#2").click(function() { 
    test.trigger("bye"); 
}); 


$.when.apply($, promises).done(function() { 
    alert('triggered'); 
    //might be nice to remove the event triggers here. 
});​