@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Marionette.View の onRender/onShow/onAttach の違い

「ビューが表示されたら DOM について何かする」みたいな処理を、 onRender/onShow どちらのフックに書くのが適切なのか?と疑問に思ったのでチャットルームで質問してみた

onRender と onShow の違いってなんなの?使い分けるべきなの?

https://gitter.im/marionettejs/backbone.marionette?at=55892fa0d682cdb709fc2c9a https://gitter.im/marionettejs/backbone.marionette?at=558931c6de13aa467b1fe48b

onRender はそのビューのテンプレートが HTML 文字列として render されたときに呼ばれる。だから onRender が呼ばれただけでは、そのビューが region の中に表示されているとは限らない。一方 onShow はビューが region の中に表示されたときに呼ばれる。だから onShow が呼ばれただけでは、そのビューの HTML が DOM に attach されているとは限らない。

(後者に想像で補足: どの region にも show されていない LayoutView の中の region に show したら、そういう状況が起こり得る。 Bootstrap modal が消えてる状態で modal の中に show した、とかで発生しそう)

jQuery プラグインを適用したい、みたいなケースでは結局どれを使えばいいの?

http://marionettejs.com/docs/v2.4.2/marionette.view.html#view-attach--onattach-event

View の HTML が DOM に attach された時点で attach イベントが発火する。 onAttach というフックもあるからそれを使うのがおそらくもっとも適切。