当“MyFunction”(创建一个元素)完成时,我需要调用“MyOtherFunction”,而MyFunction不知道MyOtherFunction是什么。
我需要这个的原因是扩展了jquery驱动的文件上载用户控件,该控件在具有不同功能的几个地方使用。一个特定的页面显示了它的标题和文件数,当上传完成时,我需要根据显示的文件数量(通过创建的元素)修改文件计数我认为:
$(UserControl).on(MyFunction, UploadElem, MyOtherFunction);
但这条路线没有完成任何事情。我可以更改用户控件的最多功能是添加函数调用,但不会影响原始用户控件功能。
我不确定是因为MyFunction不是一个事件而且没有冒泡,或者它是否不可能使用定义的函数作为.on()的参数是我无法得到这个的原因代码工作。有什么建议吗?
答案 0 :(得分:2)
我能想到的最简单的方法是 duck punching 分别挂钩该方法:
var _oldMyFunction = MyFunction;
MyFunction = function() {
_oldMyFunction.apply( this, arguments );
MyOtherFunction();
};
答案 1 :(得分:0)
我设法解决了我自己的问题,但背景对于答案非常重要:
// Using a Global JavaScript object I created:
GlobalNameSpace.ExtensionFunction = function(oParam1, oParam2, oParam3)
{
/// <summary>All parameters are optional</summary>
return; // For instances when it is not being overwritten, simply return
}
//In the Code for the user control:
GlobalNameSpace.UploadControl.UploadComplete(oSender, oArgs)
{
///<summary>Handles the Upload process</summary>
// process the upload
GlobalNameSpace.ExtensionFunction(oSender, oArgs);
}
//and finally in the code to extend the functionality
GlobalNameSpace.Page.Init
{
///<summary>Initializes the page</summary>
// redefine the extension function
GlobalNameSpace.ExtensionFunction = function(oSender, oArgs)
{
GlobalNameSpace.Page.Function(oSender, oArgs);
}
}
这允许我扩展我需要的任何东西,而不会污染我的对象,并且已经存在一些通用的东西来调用我的更改。这个解决方案解决了我需要onCreate函数的问题,我创建的元素代表我上传的项目以触发显示文件数量的标题。非常有用