1

別のパブリック メソッドで追加の動作を追加するには、jQuery プラグイン ( https://github.com/idiot/unslider ) を拡張する必要があります。

(function(){
    // Store a reference to the original remove method.
    var originalMethod = $.fn.unslider;
    // Define overriding method.
    $.fn.unslider = function(){

        // Execute the original method.
        originalMethod.apply( this, arguments );

        console.log( "Override method" );

        function test() {
            console.log("test called");
        }

        this.each(function() {
            // Operations for each DOM element
            console.log("each dom element?");

        }).data('unslider', {
            // Make test accessible from data instance
            test: test
        });

        return this;
    }
})(jQuery);

呼び出し時にパブリックメソッドにアクセスできるようにすることはすでにできました

var slider = $('#slider');
slider.data('unslider').test();

ただし、とにかく unslider の古い動作を維持したいが、プラグインを別の機能で拡張します。誰にもアイデアがありますか?

フィドルを作成したので、何が起こっているかを確認できます: 新しい関数が呼び出されますが、古い関数はなくなりました: http://jsfiddle.net/b2os4s7e/1/

4

4 に答える 4

1

unslider のソースを見ると、Unslider インスタンスがデータ内に格納されていることがわかります。

    //  Enable multiple-slider support
    return this.each(function(index) {
        //  Cache a copy of $(this), so it
        var me = $(this),
            key = 'unslider' + (len > 1 ? '-' + ++index : ''),
            instance = (new Unslider).init(me, o);

        //  Invoke an Unslider instance
        me.data(key, instance).data('key', key);
    });

コードでは、このオブジェクトを独自のオブジェクトで上書きしています。ただし、スライダーは Unslider インスタンスがあることを想定しています。したがって、このインスタンスを取得してから、独自の関数で拡張する必要があります。

var key = $(this).data('key');
var obj = $(this).data(key);
obj.test = function() { console.log('Working!'); };

http://jsfiddle.net/b2os4s7e/2/を参照してください

于 2015-08-07T06:40:33.487 に答える
0

JQueryを拡張するには、使用する必要があります.fn.extend

(function($){ 
    $.fn.extend({
        helloworld: function(message){
            return this.each(function(){
                $(this).click(function(){
                    alert(message);
                });
            });
        }
    });
})(jQuery)

オブジェクト.fn.extendはjQueryの拡張機能に使用されます

于 2015-08-06T14:57:53.123 に答える
0

回答ありがとうございます。私はこのようにしました:

(function($){
    var originalMethod = $.fn.unslider;

    $.fn.extend({
        unslider: function(o) {
            var len = this.length;

            var applyMethod = originalMethod.apply( this, arguments );

            var key = applyMethod.data('key');
            var instance = applyMethod.data(key);

            //  Cache a copy of $(this), so it
            var me = $(this);

            if (instance) {
                instance.movenext = function (callback) {
                    return instance.stop().to(instance.i + 1, callback);
                };
                instance.moveprev = function (callback) {
                    return instance.stop().to(instance.i - 1, callback);
                };
            }

            return applyMethod.data(key, instance);

        }
    });
})(jQuery)

キーは、sroes が提案したようにデータ属性に対処することでした。

さらに、古い方法が必要なので、元の方法を適用する必要がありました。

于 2015-08-07T09:50:41.560 に答える