2012-02-17 32 views
4

我有幾個函數用於綁定頁面上的div與事件。有MenuHandlers,CalendarHandlers,PopupHandlers ....通過函數名執行函數列表

因此,目前,我有一個叫做BindHandlers的函數,我從文檔就緒函數中調用並且一個接一個地運行所有的處理函數。

有一個班輪解決方案,會說類似「呼叫所有具有功能的‘處理程序’,在他們的函數名

這裏的功能是什麼樣子?

function BindHandlers() { 
    MenuHandlers(); 
    CalendarHandlers(); 
    PopupHandlers(); 
    ... 8 more like this 
} 

什麼我在尋找取代:

BindHandlers(); // replace that line with the following: 
"call all the functions that have "Handlers" in their names 

感謝您的建議

+0

你爲什麼會想這樣做的其他方式?它不可能比只是一個一個做得更快。 – GoldenNewby 2012-02-17 23:04:49

+0

這些函數是你的一個對象的全局函數還是屬性? – 2012-02-17 23:05:27

+0

因爲這樣,如果我添加Handlers函數,它們就會自動執行。 – frenchie 2012-02-17 23:06:22

回答

4

如果這些功能都是全球性的,你可能呼叫名稱以Handlers所有功能,像這樣的東西

for (var x in window) 
    if (typeof window[x] === 'function' && /Handlers/.test(x)) 
     window[x](); 

這裏有一個simple demo

+0

好吧,這真的很酷;不是一蹴而就的,但仍然解決了必須註冊處理程序的問題。 – frenchie 2012-02-18 12:29:17

0

骨幹有這樣的:

events: { 
    'click #menu'  : 'MenuHandler', 
    'click #calendar' : 'CalendarHandler', 
    // etc. 
} 

的事件綁定是在創建相應視圖時自動執行的。

您可以使用此模式:

bindEvents({ 
    'click #menu'  : 'MenuHandler', 
    'click #calendar' : 'CalendarHandler', 
    // etc. 
});