jQueryプラグインのパターンについてもっと学び始めていますが、何かに遭遇しました。以下のコードを参照してください。onclick関数を使用してプラグインのオプション/デフォルトにアクセスしたいのですが、方法がわかりません。
function SomePlugin(element,options)
{
this.$el = $(element);
this.options = $.extend({},
{
button: '#button',
someVariable:'fuu',
anotherVariable:'bar'
},options);
this.init();
}
SomePlugin.prototype =
{
init:function()
{
var button = this.$el.find(this.options.button)
button.on('click', this.onClick);
},
onClick: function(event){
// Need to access the options (someVariable, anotherVariable) here... how?
}
};
$.fn.somePlugin = function(options)
{
return this.each(function()
{
if( !$.data(this,'somePlugin') )
{
$.data(this,'somePlugin',new SomePlugin(this,options));
}
});
};
以下のコードを試しましたが、何らかの理由で正しく感じられません。もっと良い方法はありますか?また、プラグインの構造に関する他の提案やヒントがありますので、お知らせください。ところで、読みやすさのためにjQueryラッパーを省略しました
function SomePlugin(element,options)
{
this.el = element;
this.$el = $(element);
this.options = $.extend({},
{
button: '#button',
someVariable:'fuu',
anotherVariable:'bar'
},options);
this.init();
}
SomePlugin.prototype =
{
init:function()
{
var button = this.$el.find(this.options.button)
button.on('click', {instance:this}, this.onClick);
},
onClick: function(event){
// Options can be accessed using event.data.instance.options ... is there an easier way?
}
};
$.fn.somePlugin = function(options)
{
return this.each(function()
{
if( !$.data(this,'somePlugin') )
{
$.data(this,'somePlugin',new SomePlugin(this,options));
}
});
};