2012-02-14 98 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 2012-02-14 04:44:08

+0

@andyortlieb //我遇到了必須更改事件名稱的情況。事件被用於許多文件..所以我不得不打開許多文件,然後更改事件名稱,然後再次測試代碼。然後,我的同事(閃存開發人員)建議我改用事件對象。我認爲這是個不錯的主意,我剛剛得知flash,c#和其他語言以這種方式使用事件。我真的不能完全回答你的問題,因爲我試圖找出答案。 – Moon 2012-02-14 04:58:19

+0

從可維護性的角度來看,這是有道理的......但是我仍然認爲,如果你只是爲了方便地改變名稱和保持向後兼容性而在你的fire和handlers上引用一個命名對象屬性 - 這仍然會從長遠來看,這會令人大惑不解。對象屬性的名稱應該與事件的名稱一樣清晰,如果需要更改事件的名稱,則應該重命名對象屬性,所以我想我仍然錯過了這一點。 – andyortlieb 2012-02-14 16:18:25

回答

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 2012-02-14 04:59:24