做了一点谷歌搜索,但还没找到我想要的东西。
为了减少应用程序所需的JAvascript行数,我试图尽可能多地使用可重用的函数。
问题当然是尽量使这些功能变得灵活。
所以我有一个使用jQuery通过克隆函数动态扩展的表单。为了实现这一点,还需要运行一些其他功能,例如,在动态创建的元素上正确初始化datepickers。
这些要求因克隆的形式而异。
所以,我按如下方式调用我的克隆函数:
$('.button').click(function (){
var thisID = $(this).attr('id').replace('add', '');
cloneDetails(thisID, initialiseDates);
});
cloneDetails函数如下所示:
function cloneDetails(cur_num, callBackFunctions) {
/// do loads of stuff ///
callBackFunctions();
});
在这种情况下,克隆功能将运行并执行它所需的功能,然后它将运行第二个函数调用initialiseDates
我希望能够做的是指定在克隆功能之后运行的几个函数名称,并调用诸如
cloneDetails(thisID, 'initialiseDates, doSomethingElse, doAnotherThing');
因此,在运行cloneDetails函数之后,说明要运行的函数列表。
我认为我没有正确设置callBack方法,也不知道应该怎么做。
非常感谢。
编辑:我不想将所有这些函数捆绑到一个函数中,重点是这些函数应该可以独立使用和/或一起使用。
答案 0 :(得分:1)
我可以想到几种方法:
您可以拆分字符串,并在列表中的每个名称中使用eval(name+'()')
。请注意,eval()
可能是邪恶的,安全明智的。
为什么不将函数作为数组传递而不是字符串?简单地迭代arguments[1..n]
(arguments
是一个包含所有函数参数的自动变量。)
使用匿名函数:
cloneDetails(thisID, function(){
initialiseDates();
doSomethingElse();
doAnotherThing();
});
我喜欢上一种方法,因为:
答案 1 :(得分:1)
另一个选项(如果您使用的是jQuery> 1.7):您可以使用jQuery.Callbacks函数。
cloneDetails(thisID, $.Callbacks()
.add(initialiseDates, doSomethingElse, doAnotherThing));
function cloneDetails(cur_num, callBackFunctions) {
/// do loads of stuff ///
callBackFunctions.fire();
});