我正在学习使用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 );
谢谢。
答案 0 :(得分:1)
所以你在_create
:
$(some_selector).click(this._helper)
并且您希望this
中的_helper
成为this
上的this._helper
(即您的小部件)。
有各种解决方案:
您可以使用$.proxy
$(some_selector).click($.bind(this._helper, this));
如果你不必担心JavaScript版本问题,下划线也有_.bind
并且有一个本地Function.bind
。其他库将拥有自己的功能绑定工具。您已经在使用jQuery,因此$.proxy
已经可用且可移植。
您可以使用var _this = this;
自己调用的标准_helper
技巧代理:
var _this = this;
$(some_selector).click(function() { _this._helper() });
您可以使用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.
...
}