jQuery-ui:如何从私有函数内部访问选项

时间:2012-08-12 03:04:41

标签: jquery-ui jquery-ui-plugins jquery-ui-widget-factory

我正在学习使用widget-factory模式编写jquery-ui插件。为了更清晰的组织,我在对象文字中定义了一些传递给$.widget的辅助方法。我想访问这些帮助器中的选项对象。例如,在下面的样板文件中,如何访问_helper()中的选项对象?

;(function ( $, window, document, undefined ) {

    $.widget( "namespace.widgetName" , {

        options: {
            someValue: null
        },

        _create: function () {
            // initialize something....
        },

        destroy: function () {

            $.Widget.prototype.destroy.call(this);
        },

        _helper: function () {
            // I want to access options here.
            // "this" points to the dom element, 
            // not this object literal, therefore this.options wont work
            console.log('methodB called');
        },

        _setOption: function ( key, value ) {
            switch (key) {
            case "someValue":
                //this.options.someValue = doSomethingWith( value );
                break;
            default:
                //this.options[ key ] = value;
                break;
            }
            $.Widget.prototype._setOption.apply( this, arguments );
        }
    });

})( jQuery, window, document );

谢谢。

1 个答案:

答案 0 :(得分:1)

所以你在_create

中这样做了
$(some_selector).click(this._helper)

并且您希望this中的_helper成为this上的this._helper(即您的小部件)。

有各种解决方案:

  1. 您可以使用$.proxy

    $(some_selector).click($.bind(this._helper, this));
    

    如果你不必担心JavaScript版本问题,下划线也有_.bind并且有一个本地Function.bind。其他库将拥有自己的功能绑定工具。您已经在使用jQuery,因此$.proxy已经可用且可移植。

  2. 您可以使用var _this = this;自己调用的标准_helper技巧代理:

    var _this = this;
    $(some_selector).click(function() { _this._helper() });
    
  3. 您可以使用eventData form of click

    $(some_selector).click({ self: this }, this._helper);
    

    然后在_helper

    _helper: function(ev) {
        var self = ev.data.self;
        // 'self' is the 'this' you're looking for.
        ...
    }