created: 2023-02-14T08:04:58.627Z
jQueryプラグインの public メソッドについて
selectpicker
というjQueryブラグインを使っていて、enable/disabled 周りの処理でプラグインのオプションだけだと痒いところに手が届かないことになっていたので、なんとかならないかなとパッケージのコードを読んでいたらpublic method
なる記述を見つけた。
プラグインがその本体の他にpuclicなメソッドをexposeできることを知らなかった。
// Expose public methods
this.val = Selectpicker.prototype.val;
this.render = Selectpicker.prototype.render;
this.refresh = Selectpicker.prototype.refresh;
this.setStyle = Selectpicker.prototype.setStyle;
this.selectAll = Selectpicker.prototype.selectAll;
this.deselectAll = Selectpicker.prototype.deselectAll;
this.destroy = Selectpicker.prototype.destroy;
this.remove = Selectpicker.prototype.remove;
this.show = Selectpicker.prototype.show;
this.hide = Selectpicker.prototype.hide;
refresh
メソッドが探していた処理だったのでちょっと喜んだのだが、どうやって呼び出すものかわからなくて困ってしまった。
これらの処理は、普通にjQueryオブジェクトから呼べるのかともおもったが呼び出せない。コメントにはpublic
と書いてあるのでさすがにパッケージのユーザが呼び出せるコードだとは思うのだが...
// これだとダメ
$("#myid").refresh();
Googleに聞いてみると、なんと、data
メソッドにプラグインの名前(メソッド名になっているもの)を文字列で渡すと、そこからpublicメソッドにアクセスできるようになっているそうだ。
// これだと呼び出せる
$("#myid").data("selectpicker").refresh();
これは動作したが、公式のドキュメントのdata
メソッドのページにはそんなことは書いていないのでdeprecateなのかもしれない。
ちなみにChatGPTに聞いてみたところ、この方法を答えてくれた。以前は一般的な方法だったのだろうか。
自信満々に回答してくれているが、両方ともそんな記述はなかった。