Nullppo

メモ帳的なにか

Backboneでscrollイベントが動かねえぇえええ!!!

問題

今、僕はBackboneを使った画面の実装をしてました。
スクロールを使っている画面です。

いつものように

// ・・・・
el : '.sample',
events: {
    'click .button' : 'clickButton',
    'scroll .contents': 'scrollContents'
},
// ・・・・

と書きました。





f:id:nullppo:20170629132542p:plain
おい!動かないじゃねぇか!!!

なんで動かなかったのか

http://backbonejs.org/#View-events
Backbone.View.eventsに書いたイベントは、
jQueryのonを使用して関連付けられます。
rootとなるエレメントはthis.elです。
(英語が苦手だからそんなニュアンスだと思うという予測)

恐らく、上記のeventsはこうなるはず。

$('.sample').on('click', '.button', this.clickButton);
$('.sample').on('scroll', '.scroll', this.scrollContents);

なんか良さそうに見えますよね。
しかーし!!!

scrollイベントは、delegateできないみたいです。

やってみた

See the Pen Scroll Events by Daiki Nakamura (@DaikiNakamura) on CodePen.

はい。動きませんね。

僕は直でONしちゃいました。。。

この問題、renderが終わった後で、
子要素に直接バインドという手段で解決出来ます。(非推奨!

幸いなことにイベントを設定したかったViewは、
rerenderすることのないViewでした。(DOMの書き換えが発生しない)
なので、この手段が使えました。


はい。おわり。