0

私は2つのボタンを持っています:

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

2 つのボタンがクリックされた後にのみアラート メッセージが表示されるようにしたいのですが、これは 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");
}?);

これは、2 つのボタンのいずれかがクリックされるたびにメッセージを表示しますが、2 つのボタンがクリックされた後にのみ機能する必要があります。Backbone.Events 機能またはおそらく jQuery を使用してこれを達成する方法はありますか?

フィドル: http://jsfiddle.net/ccgRN/

ありがとう

4

2 に答える 2

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.
});​
于 2012-08-15T17:07:52.247 に答える
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');
});
于 2012-08-15T16:11:13.463 に答える