1

我在 JCarousel 控件之上添加了一些功能。由于在我们的代码中很多地方都用到了它,所以我开始为它创建一个 JQuery Widget。我的问题是我无法在 JCarousel 控件的回调方法中获取对“this”对象的引用。请在下面找到示例代码以供参考。

(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 方法内部 - 如上面的代码中所述,如何访问“this”小部件实例?我尝试使用 $.custom.MyCarousel.prototype 对象,但这会为不同的小部件实例返回相同的选项数据。

提前致谢。

4

4 回答 4

2

我想我找到了问题的解决方案:使用 $.proxy。感谢大家的帮助。所以修改的行是:

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

然后在回调方法中, this 将开始引用小部件实例。

于 2012-06-20T13:42:43.537 回答
0

最简单的解决方案是使用me“hack”。通过在更全局但私有的范围内分配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 回答