Вы знаете какой-либо javascript API со многими предпосылками обработки?как в искусственном интеллекте - PullRequest
0 голосов
/ 12 января 2012

JQuery может обрабатывать события, реализующие шаблон проектирования Observer, но он может обрабатывать только одно событие для одной функции обратного вызова

Мне было интересно, может ли он обрабатывать много событий: когда все эти события были вызваны или когда вселогические предпосылки стали истинными, затем вызовите функцию

Было бы намного лучше разрабатывать динамические приложения

Знаете ли вы, если что-то уже существует?Если нет: как вы думаете, было бы неплохо, если бы я разработал?

РЕДАКТИРОВАТЬ: я хотел бы сделать что-то вроде этого:

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

РЕДАКТИРОВАТЬ 2:

Iнашел отличный API, который позволяет прослушивать изменения переменных.Вам просто нужно сделать что-то вроде этого:

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

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

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Звучит как Обещание с меня.Большинство библиотек, разработанных с этой концепцией (есть много для JavaScript, включая jQuery.deferred), могут просто создать новый Promise для события, которое были выполнены некоторыми другими.

0 голосов
/ 12 января 2012

Вы можете легко сделать это вручную:

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.

Надеюсь, это тебе немного поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...