2

私はカスタムjavascript EventManagerクラスを作成しようとしています。私はクラスを作成するために彼のeasel.jsフレームワークでGrant Skinnerの書式を採用し、それに固執する必要があります。私は本当にこの時点で失われています。少なくとも概念的な意味では、私はここに正しいアイデアがあり、それは主に私を回避する範囲の問題だと思います。カスタムJavascript EventManager - 完了を手助けしてください

私はここで誰かが、これをaddListenerとdispatchEventが機能するところまで持ち上げるのを助けてくれることを願っています。

[code] 

(function(window) { 
    var EventManager = function() { 
     this.initialize(); 
    } 
    var p = EventManager.prototype; 

    // place properties here 



    // Constructor 
    p.initialize = function() { 
     p.listeners = new Array(); 
    } 

    // public methods 


    p.addListener = function(fn, event) { 
     console.log("p.addListener Hit"); 
     console.log("event: " + event); 
     console.log("handler function: " + fn); 
     if(!this.listeners[event]) { 
      this.listeners[event] = []; 
     } 

     if(fn instanceof Function) { 
      this.listeners[event].push(fn); 
     } 
     return this; 
    } 

    p.dispatchEvent = function(event, params) { 
     console.log("Dispatch Event"); 
     // loop through listeners array 
     for(var index = 0; index < listeners[ev].length; index++) { 
      // execute matching 'event' - loop through all indices and 
      // when ev is found, execute 
      listeners[event][index].apply(window, params); 
     } 
    } 

    p.removeListener = function(event, fn) { 
     // split array 1 item after our listener 
     // shorten to remove it 
     // join the two arrays back together 

    } 
    window.EventManager = EventManager; 

}(window)); 


[/code] 
[code] 
    <script> 

    eventManager = new EventManager(); 

    var FooTest = function() { 
     this.fire = function() { 
      //alert("fire"); 
     } 

      this.fire(); 
    }; 

    function onFire() { 
     // console.log("FIRED!"); 
    } 

    var o = new FooTest(); 
    eventManager.addListener.call("fire", onFire); 
    // eventManager.dispatchEvent.call(o,'fire'); 

    </script> 
[/code] 

ありがとうございました!あなたのコードは、単にいくつかの小さな問題があちこちで働いていたほとんどの部分についてhttp://jsfiddle.net/JxYca/3/

+1

listnersは配列としては無効ですが、ハッシュテーブルとして使用しています。 applyは配列を第2引数として取りますが、文字列を指定しています。なぜあなたはaddListenerで.callが必要ですか?今書いているように、あなたはこの機能の中でこれを「火」にしたいと思っています。あなたは非常に奇妙な方法でIIFEを使用している、あなたは一番上の関数を必要とすべきではありません。それ以外の場合は、コードが機能するはずです。 –

+0

Ilya - IIFEとは何ですか?配列とハッシュテーブルを混乱させていただきありがとうございます。ここに必要な方法で、JavaScriptでハッシュテーブルをどのように宣言しますか?一番上の機能はまったく必要ないはずだと言ったら、どういう意味ですか?もう一度ありがとう:) –

+0

私はこの質問がかなり古いことを知っていますが、私はカスタムイベントの生活をもっと楽にする小さな(1kb)ライブラリを書いています: ソースとAPIは私のブログポストで見つけることができます:http:// www .pointsoftware.ch/de/eventer-js-event-and-task-management-in-javascript / –

答えて

3

はここで、固定コードの作業例です。 IFFEは、直ちに呼び出される関数式(IIFE)です。これは、関数(ウィンドウ){}(ウィンドウ)全体でやっていたことです。しかし、この場合は絶対に不要でコードを汚染するだけです。 javascriptにはハッシュテーブルのようなものはありませんが、代わりにオブジェクトを使うことができます。プロパティの名前はキーになり、その値はハッシュテーブルの値になります。

あなたには関係ないものもあります。これは素晴らしい方法でイベントを行う方法ですが、3つのハンドラがイベントにアタッチされ、2つ目のイベントがJavaScript例外で失敗した場合、3番目のイベントは決して実行されません。 prototype.jsがここでイベントを実行する方法を簡単に見てみるとよいでしょう:https://github.com/sstephenson/prototype/blob/master/src/prototype/dom/event.jsイベントは非ブロックです。

関連する問題