3

私のWebアプリケーションは、Datatablesなどの多数のJQueryプラグインを使用しており、それに対応する行の並べ替えと並べ替えのプラグインがあります。

問題は、厄介なIE8の不整合を説明するために、いくつかの修正を追加する必要があることです。

したがって、たとえば、プラグインの_mouseDrag()メソッドの1つで、最初にいくつかのロジックを追加する必要があります。プラグインのソースコードを変更せずにこの関数をオーバーライドする方法はありますか?

オブジェクト指向言語では、通常、クラスメソッドをオーバーライドし、ロジックを追加してから、super()メソッドを呼び出して、APIのソースコードが変更されないようにします。

したがって、ライブラリ自体を変更せずに、JavaScriptでこれを最適にサポートするにはどうすればよいのでしょうか。

ありがとう

更新された質問

以下の例に基づいて、サードパーティライブラリに次のように存在する_mouseDrag関数をオーバーライドするにはどうすればよいですか。

(function( $, undefined ) {

$.widget("ui.sortable", $.ui.mouse, {

_mouseDrag: function (event){

...

}

これを正確にオーバーライドするにはどうすればよいですか?

4

2 に答える 2

8

これを試してください(デモを参照:http://jsfiddle.net/2rZN7/):

(function ($) {
  var oldPluginFunction =  $.fn.pluginFunction;

  $.fn.pluginFunction = function () {
    // your code
    return oldPluginFunction.call(this);
  };
})(jQuery);

デモから:

HTML:

<span id="text1">text1</span>
<span id="text2">text2</span>

JavaScript:

// define and use plugin

$.fn.pluginFunction = function (color) {
  return this.each(function () {
    $(this).css('color', color);
  });
};

$('#text1').pluginFunction('red');

// redefine and use plugin

(function ($) {
  var oldPluginFunction =  $.fn.pluginFunction;

  $.fn.pluginFunction = function () {
    $(this).css('font-size', 24)
    return oldPluginFunction.apply(this, arguments);
  };
})(jQuery);

$('#text2').pluginFunction('red');
于 2012-09-19T02:38:34.197 に答える
1

以下のように元のソースファイルを変更せずに、別のファイルでプロトタイプを作成することにより、プラグインメソッドをオーバーライドできます。

(function ($) {
    $.ui.draggable.prototype._mouseDrag = function(event, noPropagation) {

         // Your Code
    },

    $.ui.resizable.prototype._mouseDrag = function(event) {
            // Your code
    }   
}(jQuery));

ここで、プロジェクトに必要な新しいアイデアを使用して、ロジックまたは元のコードをここに配置します。

于 2013-11-15T05:08:33.183 に答える