1

私はやや緑のプログラマーであり、javascript/jquery にはまったく慣れていませんが、javascript イベントを理解していると思っていました。どうやらそうではありません。イベントリスナーを思い通りに動作させることができません。

指定されたJavaScript:

var Thing = {
    //stuff
    update: function() {
        $.event.trigger({type:'stateUpdate', more:stuff});
    }
};

var Room = {
    //more stuff
    updateHandler: function (e) {
        //handle event here
    }
};

私がjqueryを行う場合:

$(document).on('stateUpdate', $Room.updateHandler);

それはうまくいきますが、どちらもできません

$(Room).on('stateUpdate', $Room.updateHandler);

また

Room.addEventListerner('stateUpdate', $Room.updateHandler);

1 つ目は何もしませんが、2 つ目は .addEventListerner は関数エラーではありません。

何時間もグーグルで検索しましたが、わかりません。.addEventListener は、EventListener を実装するオブジェクト、handleEvent に関する何か、および EventListener を自動的に実装する関数に関する何かでのみ機能するということを見つけました。オブジェクトにそれを実装させる方法については何もありません。関数ではない JavaScript オブジェクトにリスナーを追加する方法はありませんか? イベント ハンドラ オブジェクトを作成するか、「ドキュメント」または「ウィンドウ」を使用してハンドラを呼び出す必要がありますか? それは本当に醜いようです。

そもそもオブジェクトは関数であるべきですか? それはうまくいくでしょうか?現在の意見では、すべてを機能させることは、javascriptをそうでないものにしようとしているだけです。

4

3 に答える 3

0

2 番目のエラーは入力ミスが原因です: addEventListernerhas extra rin it.

于 2014-02-24T17:55:02.913 に答える
0

@Barmar(一種の)に応えて、私はこれを解決したと信じています。ただし、これが良い代替手段であるかどうかの確認はいいでしょう。基本的に、私は加入者のことをしなければなりませんよね?ほぼイベント/リスナーですが、完全ではありません。

var thing = {
    callbacks: {},
    regCallback: function (key, which) {
        callbacks[key] = which;
    },
    remCallback: function (key) {
        callbacks[key].delete;
    }
    update: function(e) {
        for(var i = 0, len = callbacks.length; i < len;i++){
            callbacks[i](e);
        };
    }
};

var Room = {
    updateHandler: function () {
        //handle stuff
    },
    subscribe: function (which, callback) {
        which.regCallback('room', callback);
    }
    unsub: function (which) {
        which.remCallback('room');
    }
};

//wherever/whenever I need to get updates something like
Room.subscribe(thing, Room.updateHandler);
//unsub
Room.unsub(thing);
于 2013-07-24T17:52:18.853 に答える