2

次のパターンを使用して jquery プラグインを作成しています。bar関数が固有の値を返すようにしたいのですが、$(this)代わりに常に返されるようです。
コードに何か問題がありますか?

(function($){

    var Foo = function(elements, options){
    ... ...
    }


    Foo.prototype = {

        constructor: Foo,

        bar: function(){
            var value = ...        
            // do something here
            return value;
        },

    }

    $.fn.foo = function (option, kwargs){  
        return this.each(function(){ 
            var $this = $(this),
                data = $this.data('foo'),
                options = typeof option == 'object' && option

            if (!data) $this.data('foo', (data = new Foo(this, options)))
            if (typeof option == 'string') return data[option](kwargs)
        })            
    }


})(jQuery)
4

2 に答える 2

5

いいえ、コードは正しいです。問題は、現在、常に jQuery セレクター (の戻り値this.each) を返すように設定されていることです。代わりに関数の結果を返すには、次の$.fn.fooように関数を変更できます。

$.fn.foo = function (option, kwargs){  
    var retval = null;

    this.each(function(){ 
        var $this = $(this),
            data = $this.data('foo'),
            options = typeof option == 'object' && option

        if (!data) $this.data('foo', (data = new Foo(this, options)))
        if (typeof option == 'string') {
          retval = data[option](kwargs);
        }
    })

    if (!retval) {
      retval = this;
    }

    return retval;
}
于 2012-05-06T03:08:48.610 に答える
1

外側の関数にreturnthis.each(...); と書きました。

this.each呼び出した jQuery オブジェクトを常に返します (連鎖用)。渡したコールバックの戻り値は無視されます。

コールバックから値を返したい場合は、その値を変数に入れ、 を呼び出した後に変数を返しますeach。(each非同期ではないため、これは機能します)。
メソッドが 2 つの要素を持つ jQuery オブジェクトで呼び出された場合の対処方法を理解する必要があります。each通話を完全に取り除きたい場合があります。

于 2012-05-06T03:08:14.787 に答える