0

「MyFunction」(要素を作成する) が完了したら、「MyOtherFunction」を呼び出す必要があります。MyFunction は MyOtherFunction が何であるかを認識しません。

これが必要な理由は、さまざまな機能を持ついくつかの場所で使用される jquery を利用した fileupload ユーザー コントロールを拡張するためです。特定のページにヘッダーとファイル数が表示され、アップロードが完了したら、(作成された要素によって) 表示されるファイルの数に応じてファイル数を変更する必要があると思いました:

$(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 に答える