1

JCarousel コントロールの上にいくつかの機能を追加しました。コードの多くの場所で使用されているため、JQuery ウィジェットの作成を開始しました。私の問題は、JCarousel コントロールのコールバック メソッド内で「この」オブジェクトへの参照を取得できないことです。以下のサンプルコードを参考にしてください。

(function ($, undefined) {
$.widget('custom.MyCarousel', {
   options: {
        noOfVisibleItems: 2
        },
   _init: function () { this.BindCarosuel(); },
   BindCarosuel: function () {
   jQuery(this.element).jcarousel({
        size: this.options.noOfVisibleItems.length,
        itemLoadCallback: { this.mycarousel_itemLoadCallback }

        });
   },
   MyWidgetCustomMethod: function (index) {
   },
   mycarousel_itemLoadCallback: function (carousel, state) {
        // How to get access to options object (noOfVisibleItems) 
        // and methods like MyWidgetCustomMethod ?
   }
   }
)
} (jQuery));

私の問題は mycarousel_itemLoadCallback メソッド内にあります - 上記のコードで述べたように、「この」ウィジェットインスタンスにアクセスするにはどうすればよいですか? $.custom.MyCarousel.prototype オブジェクトを使用してみましたが、これは異なるウィジェット インスタンスに対して同じオプション データを返します。

前もって感謝します。

4

4 に答える 4

2

私の質問に対する解決策を見つけたと思います: $.proxy を使用してください。助けてくれてありがとう。したがって、変更された行は次のとおりです。

itemLoadCallback: { $.proxy(Self.mycarousel_itemLoadCallback, this) }

次に、コールバック メソッドで、これがウィジェット インスタンスの参照を開始します。

于 2012-06-20T13:42:43.537 に答える
0

最も簡単な解決策は、me「ハック」を使用することです。thisよりグローバルでありながらプライベートなスコープで変数に割り当てることによりme、コールバックでオブジェクトにアクセスできることを意味します。次のようにしてみてください:

(function ($, undefined)
{
    $.widget('custom.MyCarousel',
    {
        me: this,

        options: {
            noOfVisibleItems: 2
        },

        _init: function () { this.BindCarosuel(); },

        BindCarosuel: function ()
        {
            jQuery(this.element).jcarousel({
                size: this.options.noOfVisibleItems.length,
                itemLoadCallback: { this.mycarousel_itemLoadCallback }

            });
        },

        MyWidgetCustomMethod: function (index) {

        },

        mycarousel_itemLoadCallback: function (carousel, state) {
            // How to get access to options object (noOfVisibleItems) 
            // and methods like MyWidgetCustomMethod ?

            alert(me.options.noOfVisibileItems);
        }
    })
}(jQuery));
于 2012-06-18T08:06:55.280 に答える
-1

これを試してください:

$(this)[0]
or
this[0]

このプラグインで動作するかどうかはわかりませんが、経験則として、コールバック内に jquery インスタンスがあり、基になるオブジェクトにアクセスしたい場合は、配列演算子を使用してアクセスできます。上に示しました。

于 2012-06-18T08:01:00.550 に答える
-1

次のソリューションが機能すると思います

jQuery(this.element).jcarousel({
    size: this.options.noOfVisibleItems.length,
    itemLoadCallback: function(){ return this.mycarousel_itemLoadCallback() }

    });
于 2013-10-23T02:07:44.983 に答える