2012-10-23 96 views
0

当“MyFunction”(创建一个元素)完成时,我需要调用“MyOtherFunction”,而MyFunction不知道MyOtherFunction是什么。扩展javascript选项以添加功能

我需要这个的原因是扩展jquery支持的文件上载用户控件,它在几个具有不同功能的地方使用。具体的页面显示标题和文件计数它,并上传完毕后,我需要根据多少文件显示(通过创建的元素)来修改文件数心想:

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

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

我不确定是否因为MyFunction不是一个事件并且不会冒泡,或者它只是不可能使用已定义函数作为.on()的参数是我无法获取的原因这个代码工作。有什么建议么?

回答

2

我能想到的最简单的办法,就是鸭冲压分别挂钩这个方法:

var _oldMyFunction = MyFunction; 

MyFunction = function() { 
    _oldMyFunction.apply(this, arguments); 
    MyOtherFunction(); 
}; 
+0

这可能工作。我不确定在我的情况下,但这个答案绝对看起来像它会检查出并至少帮助其他人,谢谢! –

+0

不幸的是,我的情况,这条路线并不完全是我需要它独自站立的。我可以在不需要事件参数的情况下添加ClientUploadFinished函数,并查看是否可以使用此功能来使用通用扩展方法来完成我需要的功能 –

+0

我确实在您的答案中使用了这个概念来解决我的问题,所以我会标记为我的答案,但请看看我的答案,看看我是如何使用它! –

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函数的问题,这些元素用于表示我上传的项目,以触发显示文件数量的标题。非常有用

+0

总的来说,这个问题是通过让我的对象体系结构更复杂一点而终结的。这里的答案仅仅是一个带状图 –

+0

这种格式不是最佳答案,因为任何对象都可以在我制作的全局命名空间中覆盖它。我将不得不重温这个.. –