jQuery的用户界面:如何访问选项从私有函数中(jQuery-ui: How do I acces

2019-10-17 03:56发布

我学习写使用窗口小部件工厂模式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 );

谢谢。

Answer 1:

所以你的里面做这个_create

$(some_selector).click(this._helper)

并希望this里面_helperthisthis._helper (即你的widget)。

有各种不同的解决方案:

  1. 你可以使用$.proxy

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

    下划线也_.bind ,有一个本地Function.bind ,如果你不担心JavaScript版本的问题)。 其他图书馆都会有自己的功能绑定工具。 你已经在jQuery的发挥,从而$.proxy已经可以和便携为好。

  2. 你可以使用标准的var _this = this; 招代理_helper自称:

     var _this = this; $(some_selector).click(function() { _this._helper() }); 
  3. 您可以使用eventData的形式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. ... } 


文章来源: jQuery-ui: How do I access options from inside private functions