0

当“MyFunction”(创建一个元素)完成时,我需要调用“MyOtherFunction”,而 MyFunction 不知道 MyOtherFunction 是什么。

我需要这个的原因是为了扩展一个 jquery 驱动的文件上传用户控件,该控件在多个具有不同功能的地方使用。一个特定的页面显示了它的标题和文件数,当上传完成时,我需要根据显示的文件数(按创建的元素)修改文件数,我想:

$(UserControl).on(MyFunction, UploadElem, MyOtherFunction);

但这条路线没有完成任何事情。我最多可以更改用户控件是添加一个函数调用,但不会影响原始用户控件的功能。

我不确定是否因为 MyFunction 不是事件并且不会冒泡,或者是否无法使用定义的函数作为 .on() 的参数是我无法让此代码工作的原因. 有什么建议么?

4

2 回答 2

2

我能想到的最简单的方法是鸭子冲孔分别钩住该方法:

var _oldMyFunction = MyFunction;

MyFunction = function() {
    _oldMyFunction.apply( this, arguments );
    MyOtherFunction();
};
于 2012-10-23T19:24:31.603 回答
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 函数来表示我上传的项目以触发标题显示文件数量的问题。很有用

于 2012-10-23T21:01:12.270 回答