2012-02-17 50 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. 
});