2012-01-11 6 views
0

JQueryはObserver Design Patternを実装したイベントを処理できますが、1つのコールバック関数に対して1つのイベントしか処理できませんあなたは多くの前提条件を扱うjavascript APIを知っていますか?人工知能のように

多くのイベントを処理できるかどうかは疑問でした。すべてのブール施設は、関数呼び出しの真になった

それは、動的なアプリケーション

すでにそのようなものを存在する場合、あなたが知っています

を開発するより良いだろうか? そうでない場合:私が開発すればいいと思いますか?

EDIT:

when((a==b && c!=0), function(){ 
//do something when a==b and c!=0 
alert("a==b && c!=0"); 
}); 

EDIT 2:私は、変数の変更をリッスンできるように偉大なAPIを見つけた

私はこのような何かをしたいと思います 。あなただけのこのような何かを持っている:あなたは簡単に手動でこれを行うことができます

obj.watch(function(){ 
alert("obj changes"); 
}); 

http://watch.k6.com.br/

+0

私は答えを更新しましたが、これはもっと役立つでしょうか? – Aidiakapi

答えて

0

var flag1 = false; 
var flag2 = false; 
var flag3 = false; 
var checkAllFlags = function() { 
    if (!flag1 || !flag2 || !flag3) return; 
    checkAllFlags = function() { }; 
    allFlagsSet(); 
} 
var allFlagsSet = function() { 
    // Execute here when all flags are set 
} 

// When you set a flag do it like this: 
flag2 = true; 
checkAllFlags(); 

それとも、このクラスを使用することができます。

window.flagger = function (count, callback, once) { 
    var curr = this; 
    curr.callback = callback; 
    if (once) 
     curr.called = false; 
    curr.flags = []; 
    curr.flagsLeft = count; 
    for (var i = 0; i < count; i++) 
     curr.flags[i] = false; 

    this.flag = function (index) { 
     if (!curr.flags[index]) { 
      curr.flags[index] = true; 
      if (--curr.flagsLeft <= 0 && (!once || !curr.called)) { 
       if (once) curr.called = true; 
       curr.callback(); 
      } 
     } 
    }; 
    this.unflag = function (index) { 
     if (curr.flags[index]) { 
      curr.flags[index] = false; 
      curr.flagsLeft++; 
     } 
    }; 
    this.reset = function (force) { 
     for (var i = 0; i < count; i++) 
      curr.flags[i] = false; 
     curr.flagsLeft = count; 
     if (once && force) 
      curr.called = false; 
    }; 
    this.isFlagged = function (index) { 
     return curr.flags[index]; 
    }; 
} 

そして、このように使用してください:

var myFlagger = new flagger(
    /* The amount of flags that need to be set: */8, 
    /* The function that needs to be called when the flags are all set: */ 
    function() { alert('Callback function called'); }, 
    /* If the callback function should be called again when a flag is unflagged and reflagged. 
     Optional. Default: false */false); 

// You can now use these functions: 
myFlagger.flag(0); // Use this to set a flag, index ranges from 0 to count - 1. 
myFlagger.unflag(0); // Unflags an index. 
myFlagger.reset(); // Resets all flags to false. 
myFlagger.reset(true); // Using this forces the reset, returning to full start 
         // state, causes callback function to be called again 
         // even if 'once' is specified. 
alert('0 is flagged: ' + myFlagger.isFlagged(1)); // Returns if flag is flagged. 

これは多少役に立ったと思います。

+0

しかし、私は変数の値が変わったときにすべての変数を検証する必要があります。 私は、前提の各変数のオブザーバのようなものがあると思っていました。サブジェクトの値が変更され、次にすべてがtrueならコールバック関数が呼び出されます。 – melanke

+0

jQuery内のそのような機能は認識しません。/ – Aidiakapi

+0

@ user858257バイナリフラグとビットマスクを使ってロジックを実行することもできますが、それは簡単ではありません。 https://developer.mozilla.org/ja/JavaScript/Reference/Operators/Bitwise_Operators#Example:_Flags_and_bitmasks – qw3n

0

Promiseのような音です。そのコンセプトで開発されたほとんどのライブラリ(jQuery.deferredを含むJavaScript用のライブラリが多数あります)は、他の人が実現したイベントのための新しいPromiseを単純に構築することができます。

+0

私は$ .defferedを読んでいます。それは本当に役立ちます、私が探しているものになるかもしれない仕事があります、ありがとう – melanke

+0

私はjQueryの約束クラスが最も強力ではないと思っていますが、すでにjQueryを使用している場合は、dojoまたは[Q](https://github.com/kriskowal/q)の代わりになる可能性があります – Bergi

+0

実際には、 jqueryのdeferredsクラスはそれほどクールではありません!私はアプリケーションロジックの何かが起きたときに$ .javery apiの何かが$ ajaxのように起こったときに$。を使用する方法を見つけられませんでした。 – melanke

関連する問題