2012-02-14 8 views
1

JavaScriptで開発しているうちに、関数間でどのような引数が渡されるかを調べる時間を費やしました。そこで私は今日新しい方法を試しました。私は単純なオブジェクトを作成し、イベント名と引数を定義しました。カスタムJavaScriptイベントオブジェクト?

var GreetingEvent = { 
    HELLO: 'hello', 
    'arguments': { 
     name: null 
    } 
} 

// dispatch 
// pseudo code 
this.fireEvent(new MyEvent(GreetingEvent.HELLO,"myname")); 

// listening 
// pseudo code 
this.listenToEvent(GreetingEvent.HELLO, this.onGreetingEvent); 

他の人がすでに自分の状況を経験していると確信しています。

あなたの状況と解決策は何ですか?

アップデート:私は今コーディングしていますか

これがあります。

// dispatch 
// pseudo code 

    this.fireEvent('hello',{name:'myname'}); 

// listening 
// pseudo code 

    this.listenToEvent('hello', this.onGreetingEvent); 

このコードの問題は、私の同僚は、引数はそのリスナーに渡されているかを調べるために私のコードを開く必要がありますか、彼らはにconsole.logを使用する必要があります()。それは実際には問題ありません。私はもっ​​と良い方法を見つけようとしています。

+0

あなたのスタイルが変わったのを見てうれしいです。私は、そのオブジェクトがあなたを買っていたものに困惑しています。あなたはまだ文字列であるイベント名を参照していました - なぜそれを隠すのでしょうか? – andyortlieb

+0

@andyortlieb //イベント名を変更しなければならない状況がありました。このイベントは多くのファイルで使用されていました。そのため、多くのファイルを開いてイベント名を変更し、コードを再度テストしなければなりませんでした。その後、私の同僚(フラッシュデベロッパー)は私にイベントオブジェクトを代わりに使用するように勧めました。私はそれがかなり良いアイデアだと思って、フラッシュ、C#、および他の言語がそのような方法でイベントを使用することを知りました。私は本当にあなたの質問に正確に答えることができません。 – Moon

+0

それは保守性の観点からはある意味がありますが、名前を簡単に変更して下位互換性を維持するために、火災やハンドラの名前付きオブジェクトプロパティを参照している場合でも、まだ気になります。長期的に大規模に混乱している。オブジェクトのプロパティの名前はイベントの名前と同じくらい明確でなければならず、イベントの名前を変更する必要がある場合は、おそらくオブジェクトプロパティの名前を変更する必要があります。 – andyortlieb

答えて

1

Ext-JSは、アノテーションのようなJS-docを通じてそれを行います。その後、そのイベントは公開されたドキュメントの一部になります。 APIを使用することはできませんし、きれいなドキュメントを手に入れることはできませんが、ドキュメントスタイルを使用することはできますし、コードのユーザーはドキュメントを見ることができます。 http://docs.sencha.com/ext-js/4-0/#!/api/Ext.panel.Panel-event-resize

ここでは、イベントを宣言するコードの例を示します。

me.addEvents(

     /** 
     * @event beforeclose 
     * Fires before the user closes the panel. Return false from any listener to stop the close event being 
     * fired 
     * @param {Ext.panel.Panel} panel The Panel object 
     */ 
     'beforeclose', 

     /** 
     * @event beforeexpand 
     * Fires before this panel is expanded. Return false to prevent the expand. 
     * @param {Ext.panel.Panel} p The Panel being expanded. 
     * @param {Boolean} animate True if the expand is animated, else false. 
     */ 
     "beforeexpand", 
+0

洞察をいただきありがとうございます! – Moon

関連する問題